C ++通过PID停止来自客户端的暴力退出的其他程序

时间:2017-03-27 09:19:37

标签: c++ pid

我有一个.exe程序,它会在执行期间触发其他一些文件。

因此,在给定的点上,树可能会变成:

Main program
    -Program 1
    -Program 2
    -Program 3

在所有这些程序中,我有他们的PID,所以我能够成功地关闭它们。但是,当用户'暴力强制程序'(手动关闭程序)时,我无法关闭这些子程序。是否有一个选项可以在主程序本身实际退出之前触发子程序的关闭。 (例如,某些内容也可以在html页面中提醒用户,例如他们确实想要离开页面)。

因为,当这种情况发生时,在下一次运行时,主程序将尝试再次启动这些子程序,但它们已经在运行。 (并且主程序的设置是时间相关的,必须在启动时转移到其他子程序才能正常工作)

理想情况下,我希望有一个跨平台的解决方案,因为我必须使该应用程序适用于Windows,Linux和MacOS。

感谢您的回答。

1 个答案:

答案 0 :(得分:1)

这是一项操作系统功能,每个操作系统都以自己的方式提供。跟踪PID不起作用,因为你提到的原因(你的父进程本身可能崩溃),第二,因为子进程可能产生需要跟踪的自己的子进程,然后是grand-grand - 孩子等等。

在Windows上,NT Job Objects要求JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE

process groups处理
  

当作业的最后一个句柄关闭时,导致与作业关联的所有进程终止。

使用它的方法是在父进程中创建作业对象并使句柄不可继承。然后,任何子进程都将成为作业的一部分,但只有一个句柄(父进程拥有的句柄)。如果父进程崩溃,则操作系统将回收句柄,这将终止NT作业对象,终止所有子进程以及任何子进程或祖父进程。

在Linux(和OS X)上,使用{{3}}实现了相同的功能。

我不知道任何跨平台的库会将其抽象为一致的统一API。