我找不到一个很好的方法来找出Linux进程何时退出。有人有解决方案吗?
我能想到的是定期检查流程列表,但这不是即时且非常昂贵的(每次都必须遍历所有流程)。
Linux上是否有用于执行此操作的界面?像waitpid
这样的东西,除了可以从不相关的过程中使用的东西外?
谢谢, Boda Cydo
答案 0 :(得分:4)
你不能等待一个无关的过程,只有孩子。
比检查进程列表更简单的轮询方法,如果您有权限,则可以使用kill(2)
系统调用和“发送”信号0。
来自kill(2)
手册页:
如果sig为0,则不发送信号, 但仍然执行错误检查; 这可以用来检查 存在进程ID或进程 组ID
答案 1 :(得分:2)
也许你可以和另一个程序一起启动程序,第二个程序在第一个程序停止时做你想做的事情,比如发送通知等。
考虑这个非常简单的例子:
sleep 10; echo "finished"
sleep 10
是第一个进程,echo "finished"
是第二个进程(虽然echo通常是一个shell插件,但我希望你明白这一点)
答案 2 :(得分:2)
另一个选择是让进程打开一个IPC对象,例如unix域套接字;您的监视程序进程可以检测进程何时退出,因为它将立即关闭。
答案 3 :(得分:1)
如果您知道相关过程的PID,则可以检查/ proc / $ PID是否存在。这是一个相对便宜的stat()
电话。