杀死进程事件

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?

【讨论】:

以上是关于杀死进程事件的主要内容,如果未能解决你的问题,请参考以下文章

从服务中关闭进程而不杀死进程

linux杀死进程怎么一下子全部杀死

当父进程被杀死时,使用 fork() 创建的子进程是不是会自动被杀死?

linux下 用啥命令查看进程?如何杀死进程?

优雅地杀死在 Linux 上运行的 .NET Core 守护进程

Android可以彻底杀死一个进程吗