杀死流程事件

时间:2012-02-22 14:50:55

标签: c# process

想象一下启动一个进程或启动一个应用程序,但是在任务管理器中会杀死这个进程。是否有相关事件?

此代码,取消用户关闭窗口应用程序

private void Form1_Aplicacao_FormClosing(object sender, FormClosingEventArgs e)
{
   if (e.CloseReason == CloseReason.UserClosing)
      e.Cancel = false;
}

但是如果我使用process.Kill()方法,则FormClosing事件尚未被触发。 我的问题:有一个事件要杀死这个自己的过程吗?

3 个答案:

答案 0 :(得分:3)

进程被终止时不会引发任何事件。最有可能的是,当被杀死时,该过程被简单地从调度程序的可运行任务列表中移除,其存储器被释放,然后OS随后拾取任何剩余的部分。我绝对不会依赖于析构函数或垃圾收集运行,因此任何正在使用的操作系统无法清理的资源都将被泄露。

(实际上)杀死一个过程意味着你杀死它,将它切片,研磨它,并将碎片扔进海洋。从技术上讲,没有跳进杀戮过程'代码已发出,因此在该代码中不会触发任何事件。请记住,事件,如许多其他流控制结构(循环,条件等)以及多任务本身,只是花哨的。非常有用花哨的getos,诚然,但仍然只是跳转到可用代码的不同部分。

答案 1 :(得分:1)

简短的回答:不,你的应用程序无法知道(例如,引发的事件)其托管进程被残忍杀死。

答案 2 :(得分:0)

这不是正确的。 您可以使用流程通信技术,如PIPES。

您可以发送投掷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?