3

我想编写一个程序,只要该操作系统上的任何正在运行的进程死亡,操作系统就应该通知该程序。

如果先前存在的进程已经死亡,我不想每次都进行轮询和比较。我希望我的程序在进程终止时收到操作系统的警报。

我该怎么做?一些示例代码会很有帮助。

PS:寻找 Java/C++ 中的方法。

4

3 回答 3

3

听起来你想要PsSetCreateProcessNotifyRoutine ()。请参阅这篇文章以开始:

http://www.codeproject.com/KB/threads/procmon.aspx

于 2009-09-08T10:07:03.120 回答
1

在 Unix 下,您可以使用sigchld信号来获得进程死亡的通知。但是,这要求被监视的进程是监视进程的子进程。

在 Windows 下,您可能需要有一个有效的进程句柄。如果您自己使用 生成进程CreateProcess,您将免费获得句柄,否则您必须通过其他方式获取。然后可以通过调用WaitForSingleObject句柄来等待进程终止。

抱歉,我没有任何示例代码。我什至不确定,在 Windows 下等待进程句柄是否真的等待进程终止(与其他一些“重要”条件相反,这会导致进程句柄进入“信号”状态或其他东西)。

于 2009-09-08T09:59:17.830 回答
0

我没有准备好代码示例,但一个想法——在 Linux 上——可能是在第一次启动观察程序(例如$ pgrep使用进程终止时被删除。与轮询相比,这不会花费任何大量 CPU 资源。/proc/<PID>/

现在,inotify 不完全支持procfs ,所以我不能保证这种方法确实有效,但它当然值得研究。

于 2020-04-24T01:14:26.617 回答