终止进程事件

本文关键字:事件 进程 终止 | 更新日期: 2023-09-27 18:25:37

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

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

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

但如果我使用过程。Kill()方法,尚未激发FormClosing事件。我的问题是:有一个事件可以在这个过程中杀死一个人吗?

终止进程事件

进程终止时不会引发任何事件。最有可能的是,当进程被终止时,它只是从调度程序的可运行任务列表中删除,它的内存被释放,然后操作系统会拾取剩余的部分。我绝对不会指望运行析构函数或垃圾收集,所以操作系统无法清理的任何正在使用的资源都会泄漏。

(事实上)杀死一个过程意味着你杀死它,把它切片,研磨,然后把碎片扔到海里。更严格地说,不会发布跳转到终止进程的代码,因此该代码中不可能触发任何事件。请记住,与许多其他流控制结构(循环、条件语句等)以及多任务处理本身一样,事件只是一种奇特的goto。诚然,非常有用的花哨的gotos,但仍然只是简单地跳转到可用代码的不同部分。

简单回答:不,您的应用程序无法知道(例如,在引发事件时)其托管进程已被残酷杀害。

它并没有正确退出。您可以使用过程通信技术,如PIPES。

您可以发送throw PIPES并等待答案。您可以创建一个规则,如果在X时间内没有收到答案,则进程已被终止。

但这只是流程通信选项之一,有关更多信息,您可以查看以下链接:https://msdn.microsoft.com/en-us/library/windows/desktop/aa365574(v=vs.85).aspx

另请查看以下选项:C#进程启动,我如何知道进程是否结束?