gpt4 book ai didi

C++通过PID在客户端强制退出时停止其他程序

转载 作者:行者123 更新时间:2023-11-30 05:15:33 28 4
gpt4 key购买 nike

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

所以在给定点,树可能会变成这样:

Main program
-Program 1
-Program 2
-Program 3

在所有这些程序中,我都有它们的 PID,因此我能够成功关闭它们。但是,当用户“暴力破解程序”(阅读手动关闭程序)时,我无法关闭这些子程序。是否有一个选项可以在主程序本身实际退出之前触发子程序的关闭。 (例如,也可以在 html 页面中提醒用户,例如,或者他们真的想离开页面)。

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

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

感谢您的回答。

最佳答案

这是一个操作系统功能,每个操作系统都以自己的方式提供它。跟踪 PID 是行不通的,一次是因为您提到的原因(您的父进程本身可能会崩溃),其次是因为子进程可能会产生自己需要跟踪的孙子进程,然后是孙子进程- child 等等。

在 Windows 上,这由 NT Job Objects 处理通过询问 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.

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

在 Linux(和 OS X)上,使用 process groups 可以实现相同的功能。 .

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

关于C++通过PID在客户端强制退出时停止其他程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43042473/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com