首页 / 知识
关于进程:如何在Windows中自动销毁子进程?
2023-04-14 18:38:00

How do I automatically destroy child processes in Windows?在C ++ Windows应用程序中,我启动了几个长时间运行的子进程(当前我使用CreateProcess(...)来执行此操作。 如果主进程崩溃或关闭,我希望子进程自动关闭。 由于需要在"父"崩溃时起作用,因此我认为这需要使用操作系统的某些API /功能来完成。 这样就清除了所有"子"过程。 我该怎么做呢? Windows API支持称为"作业对象"的对象。以下代码将创建一个"作业",该作业被配置为在主应用程序结束时(清理其句柄时)关闭所有进程。该代码只能运行一次。
然后,在创建每个子进程时,执行以下代码以启动每个子进程并将其添加到作业对象:
VISTA注意:如果您在Vista上遇到AssignProcessToObject()的访问被拒绝的问题,请参阅Vista上的AssignProcessToJobObject始终返回"拒绝访问"。 一个有点棘手的解决方案是将父进程作为调试器附加到每个子进程(使用DebugActiveProcess)。当调试器终止时,其所有调试进程也将终止。 更好的解决方案(假设您也编写了子进程)是让子进程监视父进程,并在父进程消失时退出。 Windows Job Objects听起来是一个不错的起点。 Job Object的名称必须是众所周知的,或传递给子代(或继承该句柄)。当家长死亡时,需要通过失败的IPC"心跳"或仅在家长的进程句柄上的WFMO / WFSO来通知孩子。届时,任何子进程都可以使用TermianteJobObject降低整个组的工作效率。 您可以保持单独的监视程序运行。它的唯一任务是观察当前的过程空间以发现您所描述的情况。它甚至可以在崩溃后重新启动原始应用程序,或向用户提供不同的选项,收集调试信息等。只需尝试使其足够简单即可,您就不需要第二个看门狗来监视第一个。 您可以将每个进程封装在C ++对象中,并在全局范围内保留它们的列表。析构函数可以关闭每个进程。如果程序正常退出但崩溃了,那么所有的赌注都关闭了,这样就可以正常工作。 这是一个粗略的示例:
然后,每当启动一个时,调用allprocessess.push_back(hProcess);。 您可能必须保留启动进程的列表,并在退出程序时将其一一杀死。我不确定在C ++中执行此操作的具体细节,但这并不难。困难的部分可能是确保在应用程序崩溃时关闭子进程。 .Net能够添加一个功能,该功能在发生未处理的异常时被调用。我不确定C ++是否提供相同的功能。 就在我的头顶上:
|
最新内容
相关内容
linux运行vim命令?
linux运行vim命令?,系统,工具,官方网站,模式,基础,数据,代码,环境,入口,命令,如何使用Linux系统中的Vim编辑器1、vim编辑器的三种模式:一般模式linux下看进程命令行?
linux下看进程命令行?,系统,情况,软件,服务,状态,名称,环境,进程,命令,数据,哪些命令可以查看进程在 Linux 系统中,我们可以使用 ps 命令来查看linux监控命令运行?
linux监控命令运行?,系统,工作,地址,信息,工具,情况,标准,环境,命令,状态,linux服务器监控的几个方法和命令uptime 该命令直观的显示了服务器linux进程与磁盘命令?
linux进程与磁盘命令?,管理,系统,信息,情况,基础,增长,单位,地址,发行,命令,Linux系统中进行磁盘管理的常用命令有哪些?分别有什么功能1、Linulinux的进程管理命令?
linux的进程管理命令?,系统,实时,工作,管理,命令,地址,名称,进程,服务,基础,linux结束进程用什么命令1、【答案】:C 在Linux系统中,可以使用killlinux端口进程命令?
linux端口进程命令?,系统,情况,地址,网络,信息,状态,灵活,工具,端口,命令,如何查看linux端口被哪个进程占用netstat: 可以列出系统上所有的网络linux自动运行命令?
linux自动运行命令?,服务,系统,时间,代码,周期性,第一,命令,管理,在线,状态,linux计划任务(自动化执行任务的利器)1、Linux计划任务是一种自动linux进程的命令行?
linux进程的命令行?,地址,工作,系统,信息,命令,管理,名称,进程,目录,服务,linux查看进程命令1、linux 下查看进程可以使用的命令:ps命令查找与linux开启运行命令?
linux开启运行命令?,系统,服务,工作,管理,状态,命令,标准,情况,环境,工具,linux中如何开机启动运行指定的应用程序或指令?1、开机启动时自动运linux运行wps命令?
linux运行wps命令?,软件,官网,名称,时间,电脑,系统,工具,环境,项目,数据,wps支持linux命令行下word转pdf吗?1、通过浏览器进入到wps官网,然后点linux当前进程命令?
linux当前进程命令?,系统,信息,工作,状态,命令,进程,情况,地址,软件,实时,linux常用命令1、linux系统常用操作命令如下:ls:全拼list,功能是列出目linux运行cmd命令?
linux运行cmd命令?,电脑,系统,状态,情况,环境,命令,单位,管理,设备,数据,电脑运行命令怎么打开电脑运行命令需要同时按下“win图标”键和“R”