C ++通过PID在客户端强制退出时停止其他程序
C++ stop other programs by PID on brute force quit from client
我有一个.exe
程序,它在执行过程中会触发一些其他文件。
所以在给定的点,树可能会变成这样:
Main program
-Program 1
-Program 2
-Program 3
在所有这些程序中,我都有它们的 PID,所以我能够成功关闭它们。但是,当一个用户'brute forces the program'(读取手动关闭程序)时,我无法关闭这些子程序。是否有一个选项可以在主程序本身实际退出之前触发子程序的关闭。 (例如,在 html 页面中也可以提醒用户,或者他们真的想离开页面)。
因为,当这种情况发生时,下一个运行主程序会尝试再次启动这些子程序,然而它们已经运行ning了。 (并且主程序的设置是依赖于时间的,必须在启动时转移到其他子程序才能正常工作)
理想情况下,我想要一个跨平台的解决方案,因为我必须让该应用程序可用于 Windows、Linux 和 MacOS。
感谢您的回答。
这是一项 OS 功能,每个 OS 都以自己的方式提供它。跟踪 PID 不起作用,一次是因为您提到的原因(您的 parent 进程本身可能会崩溃),其次是因为 child 进程可能会产生 grand-children 个自己的进程需要跟踪,然后grand-grand-children等等。
在 Windows 这由 NT Job Objects by asking for the JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE
处理:
Causes all processes associated with the job to terminate when the last handle to the job is closed.
使用方法是在parent进程中创建jobobject,使handlenon-inheritable。然后任何 child 进程都将成为作业的一部分,但只有一个句柄存在(parent 拥有的那个)。如果 parent 崩溃然后句柄被 OS 回收,这将终止 NT 作业 object,杀死所有 child 进程以及任何 grand-child或盛大-grand-child 过程。
在 Linux(和 OS X)上,process groups 实现了相同的功能。
我不知道有任何 cross-platform 库可以将其抽象成连贯的统一 API。
我有一个.exe
程序,它在执行过程中会触发一些其他文件。
所以在给定的点,树可能会变成这样:
Main program
-Program 1
-Program 2
-Program 3
在所有这些程序中,我都有它们的 PID,所以我能够成功关闭它们。但是,当一个用户'brute forces the program'(读取手动关闭程序)时,我无法关闭这些子程序。是否有一个选项可以在主程序本身实际退出之前触发子程序的关闭。 (例如,在 html 页面中也可以提醒用户,或者他们真的想离开页面)。
因为,当这种情况发生时,下一个运行主程序会尝试再次启动这些子程序,然而它们已经运行ning了。 (并且主程序的设置是依赖于时间的,必须在启动时转移到其他子程序才能正常工作)
理想情况下,我想要一个跨平台的解决方案,因为我必须让该应用程序可用于 Windows、Linux 和 MacOS。
感谢您的回答。
这是一项 OS 功能,每个 OS 都以自己的方式提供它。跟踪 PID 不起作用,一次是因为您提到的原因(您的 parent 进程本身可能会崩溃),其次是因为 child 进程可能会产生 grand-children 个自己的进程需要跟踪,然后grand-grand-children等等。
在 Windows 这由 NT Job Objects by asking for the JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE
处理:
Causes all processes associated with the job to terminate when the last handle to the job is closed.
使用方法是在parent进程中创建jobobject,使handlenon-inheritable。然后任何 child 进程都将成为作业的一部分,但只有一个句柄存在(parent 拥有的那个)。如果 parent 崩溃然后句柄被 OS 回收,这将终止 NT 作业 object,杀死所有 child 进程以及任何 grand-child或盛大-grand-child 过程。
在 Linux(和 OS X)上,process groups 实现了相同的功能。
我不知道有任何 cross-platform 库可以将其抽象成连贯的统一 API。