Windows 获取进程正在运行的JobObject的句柄

Windows 获取进程正在运行的JobObject的句柄,windows,process,Windows,Process,我可以通过带null的IsProcessInJob检查我的进程是否在作业中。但我需要处理这项工作。我该怎么办 我们有一个自动化系统,将流程包装到作业对象中。但是,我们必须调用提供给我们的脚本,该脚本正在该作业对象之外启动进程。因此,我们需要手动添加该进程,这样,如果作业失败并且必须终止,它也将终止。Harry Johnstons的建议有效 如果让孩子从事这项工作的唯一原因是为了让孩子被杀,那么你可以用另一种方式来做。将子项放入新创建的作业对象中,并设置了作业\u对象\u限制\u杀死\u ON\u

我可以通过带null的IsProcessInJob检查我的进程是否在作业中。但我需要处理这项工作。我该怎么办


我们有一个自动化系统,将流程包装到作业对象中。但是,我们必须调用提供给我们的脚本,该脚本正在该作业对象之外启动进程。因此,我们需要手动添加该进程,这样,如果作业失败并且必须终止,它也将终止。

Harry Johnstons的建议有效


如果让孩子从事这项工作的唯一原因是为了让孩子被杀,那么你可以用另一种方式来做。将子项放入新创建的作业对象中,并设置了作业\u对象\u限制\u杀死\u ON\u作业\u关闭,并确保作业句柄不可继承。如果进程被终止,作业句柄将被关闭,从而导致子进程被终止


Windows不提供受支持的方法来打开与进程关联的作业对象;创建作业对象的流程有责任为其他流程提供找到作业对象的方法(如果希望其他流程能够这样做)。然而,由于你想让孩子从事这项工作的唯一原因是为了让它被自动化系统杀死,所以有一个替代的解决方案

不要试图将子对象放入现有作业对象中,而是创建一个新的作业对象,由您自己控制,并将子对象分配给它。设置“基本限制”标志,以便在删除作业对象时删除子对象及其所有子对象,并确保作业对象的句柄不可继承


如果自动化系统终止进程,或者由于任何其他原因退出进程,Windows将自动关闭句柄并删除作业对象,根据需要终止子进程。

如果自动化系统创建的作业对象具有名称,或者如果您可以修改自动化系统使其具有名称,并且如果您可以让自动化系统告诉您流程的作业名称,则可以通过这种方式打开句柄。这是最好的选择,如果可能的话,因为它是完全支持的。否则,如果您有足够的权限,则可以枚举系统中的所有作业句柄并检查每个句柄,但这需要使用不受支持的API。谢谢。它可以很好地使用命名约定——尽管如果不使用命名约定,它的命名约定没有文档记录。因此,看起来我可以选择在windows中滥用未记录的API,或者在自动化系统中使用它们来滥用未记录的行为。我有一种感觉,无论我走哪条路,它都会在未来给我们带来痛苦!如果让孩子从事这项工作的唯一原因是为了让孩子被杀,那么你可以用另一种方式来做。将子项放入新创建的作业对象中,并设置了作业\u对象\u限制\u杀死\u ON\u作业\u关闭,并确保作业句柄不可继承。如果进程被终止,作业句柄将被关闭,导致子进程被终止。谢谢!我试试看