作業(Job)
有時候需要把一些進程集中管理,如終止一個進程以及它產生的子進程,但由于Windows并沒有維護進程間父子關系,所以除非進程本身以某種方式記錄這些信息,否則很難做到管理這種父子進程樹。而作業(job)恰好能解決這一問題。
Job就像是一個"沙箱"或者進程容器,不僅能將多個進程放在一起管理,還能對其包含的進程施加額外的限制,例如:作業中的進程能使用的CPU時間,是否能注銷,是否能方位用戶對象等。
相關函數
IsProcessInJob: 判斷進程是否屬于某個已有的Job
CreateJobObject:創建作業
SetInformationJobObject:對作業及其中的進程施加限制,可能的安全限制見下表
AssignProcessToJobObject:將進程放入指定的Job,注意,已經在某個Job中的進程不能重新制定,也不能將它從該Job中移除,這樣的安全機制能保證進程不能脫離對其施加的安全限制。
CloseHandle關閉Job句柄時不會導致Job中的進程結束,只是Job對象添加了刪除標志,Job會等待其中所有的進程結束,才被刪除。
SetInformationJobObject 限制類型 | 參數 | 描述 |
基本限額 | JobObjectBasicLimitInformation | 防止Job中的進程獨占系統資源 |
擴展基本限額 | JobObjectExtendedLimitInformation | 同上 |
基本的UI限制 | JobObjectBasicUIRestrications | 防止進程更改用戶界面 |
安全限額 | JobObjectSecurityLimitInformation | 防止進程訪問安全資源(文件,注冊表) |
TerminatebObject:終止job中所有的進程,并設置同一返回值
QueryInformationJobObject:查詢job中的進程信息以及相應的限制
浙公網安備 33010602011771號