在Windows Job Objects的上下文中,如何获取当前进程的作业对象(如果它在作业对象中)? IsProcessInJob函数允许我测试给定进程(例如当前进程)是否在给定(或任何)作业中 - 但它不会产生匹配作业的句柄。
答案 0 :(得分:13)
如果您只想查找正在运行的配额/限制,或者枚举作业中的所有其他进程,则无需获取当前进程的Job对象。
您可以使用NULL调用QueryInformationJobObject
,这将是当前进程的Job对象。
要回答具体问题,请致电IsProcessInJob
了解您是否在工作。
您可以通过将NULL传递给QueryInformationJobObject
您的子流程会自动继承您的工作,除非您通过CREATE_BREAKAWAY_FROM_JOB
和工作已设置JOB_OBJECT_LIMIT_BREAKAWAY_OK
或JOB_OBJECT_LIMIT_SILENT_BREAKAWAY_OK
。在这些情况下,您可以根据需要将流程分配给新工作。
因此,在不知道句柄的情况下,您可以找到当前作业的所有内容,并在当前作业中分配子进程,或者如果您有权限,则可以在没有当前作业的情况下进行分配。即你可以做几乎手柄允许你做的所有事情。
唯一的例外是将其复制到另一个兄弟进程。如果你需要这样做,你必须让父进程以某种方式向你传递句柄值。