代码之家  ›  专栏  ›  技术社区  ›  Real Red.

在Windows和Linux中,进程终止时如何得到通知?

  •  3
  • Real Red.  · 技术社区  · 16 年前

    我想写一个程序,当操作系统上的任何运行进程死亡时,操作系统都会通知我。

    我不想自己每次都进行投票和比较,如果以前存在的进程已经死了。我希望我的程序在进程终止时由操作系统发出警报。

    我该怎么办?一些示例代码将非常有用。

    PS:在爪哇/C++中寻找方法。

    2 回复  |  直到 16 年前
        1
  •  3
  •   Stuart Moore    8 年前
        2
  •  1
  •   Dirk    16 年前

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

    在Windows下,您可能需要一个有效的进程句柄。如果您自己使用 CreateProcess ,您可以免费获取句柄,否则必须通过其他方式获取。然后可以通过调用 WaitForSingleObject 在把手上。

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

        3
  •  0
  •   balu    6 年前

    我还没有准备好代码示例,但有一个想法“在Linux上”可能是在第一次启动watcher程序(例如使用 $ pgrep )然后使用 inotify 观看 /proc/<PID>/ 在进程结束时被删除。与轮询相比,这不会占用任何重要的CPU资源。

    现在,procfs是 not completely supported by inotify ,所以我不能保证这种方法确实有效,但它确实值得研究。

    推荐文章