我想写一个程序,应该由O.S.通知。每当操作系统上的任何正在运行的进程死
如果以前存在的进程已经死亡,我不想每次都进行民意调查和比较。我希望每当进程终止时,操作系统都会通知我的程序。
我该如何解决?一些示例代码非常有用。
PS:在Java / C ++中寻找方法。
答案 0 :(得分:3)
听起来像你想要PsSetCreateProcessNotifyRoutine()。请参阅此文章开始:
答案 1 :(得分:1)
在Unix下,您可以使用sigchld
信号来获知进程死亡的通知。但是,这要求被监控的流程是监控流程的子流程。
在Windows下,您可能需要拥有该进程的有效句柄。如果您使用CreateProcess
自行生成过程,则可以免费获得句柄,否则您必须通过其他方式获取。然后可以通过调用句柄上的WaitForSingleObject
来等待进程终止。
抱歉,我没有任何示例代码。我甚至不确定,等待Windows下的进程句柄真的等待进程的终止(与其他一些“重要”条件相反,这会导致进程句柄进入“信号”状态或其他状态)。
答案 2 :(得分:0)
我没有准备好的代码示例,但是在Linux上,一个想法可能是找出您希望在首次启动观察程序时要监视的进程的ID(例如,使用$ pgrep
)然后使用inotify来观看/proc/<PID>/
–当进程结束时,它会被删除。与轮询相比,这不会花费任何大量的CPU资源。
现在,procfs是not completely supported by inotify,所以我不能保证这种方法会切实可行,但是肯定值得研究。