我正在阅读主管文件,并引用道:
在 UNIX 上,获取进程的准确启动/停止状态通常很困难。pid 文件经常会撒谎。Supervisord 将进程作为子进程启动,因此它始终知道其子进程的真实启动/停止状态,并且可以方便地查询此数据。
- 难道不能简单地通过 ps 来检索进程的状态吗?(或者这里的问题是查询进程状态的用户不一定具有对 ps 的完全访问权限)
- pid 文件有哪些问题(例如:服务崩溃时是否经常会留下 pid 文件)?
答案1
- 可用的 PID 数量有限,因此您的进程可能会(尽管可能性不大)退出,然后某个完全不同的进程会以相同的 PID 启动。要确保您查看的是正确的进程,
ps
您还必须检查启动时间,但谁会关心这个呢? - pidfile 通常由 rc 脚本而不是进程本身管理,并且正如您所怀疑的那样,当进程或服务器崩溃时,它们可能会被遗留。然后必须以某种方式决定是否可以安全地删除 pidfile,也许可以使用 来
ps
查找具有该 PID 的进程。但是,请参阅第 1 项。
答案2
是的,您可以使用 ps。但提供服务的程序通常在后台运行和/或在启动时启动,因此为方便起见,启动它们的 shell 脚本会将其 pid 记录在运行文件中。
众所周知,程序终止后会留下一些杂散的 pid 文件,因此单独依赖 pid 文件可能会不可靠。