如何在Linux中查找进程退出的时间?

8

我找不到一种好的方法来确定Linux中进程何时退出。有人有解决方案吗?

我能想到的一个方法是定期检查进程列表,但这并不是即时的,而且相当昂贵(每次都必须循环遍历所有进程)。

在Linux上是否有类似于waitpid的接口,除此之外还可以从不相关的进程中使用?

谢谢, Boda Cydo


1
编写一个C程序,该程序执行fork()和exec()操作? - Dave Jarvis
好建议,Dave。我现在打算这样做。 - bodacydo
4个回答

4

你不能等待一个无关的进程,只有子进程。

如果您有权限,可以使用kill(2)系统调用和“发送”信号0来检查进程列表的更简单的轮询方法。

kill(2)手册页面:

如果sig为0,则不发送信号,但仍执行错误检查;这可用于检查进程ID或进程组ID的存在


2

另一个选择是让进程打开一个IPC对象,例如unix域套接字;您的看门狗进程可以检测到进程退出,因为它将立即被关闭。


2
也许您可以将该程序与另一个程序一起启动,第二个程序在第一个程序停止时执行您想要执行的任何操作,例如发送通知等。考虑以下非常简单的示例:
sleep 10; echo "finished"

sleep 10 是第一个进程,echo "finished" 是第二个进程(尽管 echo 通常是 shell 插件,但我希望你能理解我的意思)


1

如果您知道所涉及进程的PID,您可以检查/proc/$PID是否存在。这是一个相对便宜的stat()调用。


同意竞争条件。进程 ID 会被回收,因此仅使用这种技术不能保证在该进程 ID 下运行的进程是原始进程。 - Paul Brannan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接