linux – 如何识别长时间运行的进程是否已经死亡?
我正在研究一个与多个进程通信的守护进程.守护程序无法一直监视进程,但它必须能够正确识别进程是否死亡以释放它为其保留的恐慌资源.
进程可以与守护进程通信,在开始时为其提供一些信息,但反之亦然.所以守护进程不能只是向进程询问它的身份. 最简单的形式是仅使用它们的PID.但最终可以在没有我的工具注意的情况下为另一个进程分配相同的PID. 更好的方法是使用PID加上过程开始的时间.具有相同PID的新进程将具有不同的开始时间.但我找不到如何以POSIX方式获取进程开始时间的方法.使用ps或查看/ proc /< pid> / stat似乎不够便携. 一个更符合POSIX标准的更复杂的想法是: >每个进程都会创建一个临时文件. 但这似乎不必要地复杂化. 有更好的标准方式吗? 编辑:守护程序必须能够在重新启动后恢复,因此无法为每个进程保持持久连接. 解决方法
尝试standard “etime” format specifier:LC_ALL = C ps -eo etime = $PIDS 公平地说,我可能会构建自己的实时进程表,而不是依赖于进程表和已用时间.这基本上是你的文件锁定方法,虽然我可能会将所有锁定文件聚合在一个已知位置并通过PID命名它们,例如/var/run/my-app/8819.lock.实际上,甚至可以对长时间运行的进程进行改进,因为文件描述符上的文件锁可以跨exec()继承. (当然,如果我关心的长时间运行的进程有一个共同的父进程,那么我宁愿查询共同的父进程,它可以是运行哪些进程的可靠权限,哪些不是.) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |