2010-09-09 32 views
7

我找不到一个很好的方法来找出Linux中进程何时退出。有没有人有解决方案?如何找出进程何时退出Linux?

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

在Linux上有没有一个接口?像waitpid之类的东西,除了可以从无关进程中使用的东西?

感谢, 博大Cydo

+1

写一个C程序,fork()s和exec()s? – 2010-09-09 13:10:26

+0

好建议戴夫。我现在要这样做。 – bodacydo 2010-09-09 14:02:21

回答

2

或许你可以与其他程序一起启动的程序,第二个做什么是你想要做的第一程序停止时,如发送通知等

考虑这个非常简单的例子:

sleep 10; echo "finished" 

sleep 10是第一个过程,echo "finished"第二个(虽然回声通常是一个shell插件,但我希望你能在p oint)

1

如果您知道相关进程的PID,则可以检查/ proc/$ PID是否存在。这是一个相对便宜的电话。

+1

这不起作用。可能存在竞赛状况。 – bodacydo 2010-09-09 14:01:24

+0

就竞赛条件达成一致。 Pid被回收,所以单独使用这种技术,不能保证在该PID下运行的进程是原始进程。 – 2015-05-31 11:00:06

4

你不能等待一个无关的过程,只是孩子。

一个简单的查询方式不是检查进程列表,如果您有权限,你可以使用kill(2)系统调用和“发送”信号0

kill(2)手册页:

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

2

另一个选择是具有过程打开IPC对象例如UNIX域套接字;您的看门狗进程可以检测到进程退出的时间,因为它会立即关闭。