杀死进程事件
Posted
技术标签:
【中文标题】杀死进程事件【英文标题】:Kill Process Event 【发布时间】:2012-03-12 21:59:06 【问题描述】:想象一下启动一个进程或启动一个应用程序,但是在任务管理器中会杀死这个进程。有关联的事件吗?
这段代码,取消用户关闭窗口的应用程序
private void Form1_Aplicacao_FormClosing(object sender, FormClosingEventArgs e)
if (e.CloseReason == CloseReason.UserClosing)
e.Cancel = false;
但是如果我使用 process.Kill() 方法,FormClosing 事件并没有被触发。 我的问题:有一个事件可以杀死这个自己的进程吗?
【问题讨论】:
***.com/questions/3326242/…的可能重复 我不相信当应用程序以这种方式突然终止时您会发现事件。 【参考方案1】:进程被杀死时不会引发任何事件。最有可能的是,当进程被终止时,它只是从调度程序的可运行任务列表中删除,它的内存被释放,然后操作系统随后拾取任何剩余的部分。我绝对不会指望析构函数或垃圾收集运行,因此操作系统无法清理的任何正在使用的资源都会泄漏。
(实际上)杀死一个进程意味着你杀死它,把它切成薄片,磨碎它,然后把碎片扔进大海。从技术上讲,不会发出跳转到被终止进程的代码,因此该代码内不会触发任何事件。请记住,与许多其他流控制结构(循环、条件等)以及多任务本身一样,事件只是花哨的 goto。诚然,非常有用花哨的 goto,但仍然只是跳转到可用代码的不同部分。
【讨论】:
【参考方案2】:简短回答:不,您的应用程序无法知道(例如通过引发的事件)其托管进程已被残忍地杀死。
【讨论】:
【参考方案3】:这不是正确的。 可以使用PIPES等流程通信技术。
您可以发送 throw PIPES 并等待答复。 您可以创建一个规则,如果 X 时间没有收到答案,则该进程已被终止。
但这只是进程通信选项之一,有关更多信息,您可以查看以下链接:https://msdn.microsoft.com/en-us/library/windows/desktop/aa365574(v=vs.85).aspx
还请查看以下选项: C# process.start, how do I know if the process ended?
【讨论】:
以上是关于杀死进程事件的主要内容,如果未能解决你的问题,请参考以下文章
当父进程被杀死时,使用 fork() 创建的子进程是不是会自动被杀死?