我找不到一种好的方法来确定Linux中进程何时退出。有人有解决方案吗?
我能想到的一个方法是定期检查进程列表,但这并不是即时的,而且相当昂贵(每次都必须循环遍历所有进程)。
在Linux上是否有类似于waitpid
的接口,除此之外还可以从不相关的进程中使用?
谢谢, Boda Cydo
你不能等待一个无关的进程,只有子进程。
如果您有权限,可以使用kill(2)
系统调用和“发送”信号0来检查进程列表的更简单的轮询方法。
从kill(2)
手册页面:
如果sig为0,则不发送信号,但仍执行错误检查;这可用于检查进程ID或进程组ID的存在
另一个选择是让进程打开一个IPC对象,例如unix域套接字;您的看门狗进程可以检测到进程退出,因为它将立即被关闭。
sleep 10; echo "finished"
sleep 10
是第一个进程,echo "finished"
是第二个进程(尽管 echo 通常是 shell 插件,但我希望你能理解我的意思)
如果您知道所涉及进程的PID,您可以检查/proc/$PID是否存在。这是一个相对便宜的stat()
调用。