监控流程

监控流程

我正在阅读主管文件,并引用道:

在 UNIX 上,获取进程的准确启动/停止状态通常很困难。pid 文件经常会撒谎。Supervisord 将进程作为子进程启动,因此它始终知道其子进程的真实启动/停止状态,并且可以方便地查询此数据。

  1. 难道不能简单地通过 ps 来检索进程的状态吗?(或者这里的问题是查询进程状态的用户不一定具有对 ps 的完全访问权限)
  2. pid 文件有哪些问题(例如:服务崩溃时是否经常会留下 pid 文件)?

答案1

  1. 可用的 PID 数量有限,因此您的进程可能会(尽管可能性不大)退出,然后某个完全不同的进程会以相同的 PID 启动。要确保您查看的是正确的进程,ps您还必须检查启动时间,但谁会关心这个呢?
  2. pidfile 通常由 rc 脚本而不是进程本身管理,并且正如您所怀疑的那样,当进程或服务器崩溃时,它们可能会被遗留。然后必须以某种方式决定是否可以安全地删除 pidfile,也许可以使用 来ps查找具有该 PID 的进程。但是,请参阅第 1 项。

答案2

是的,您可以使用 ps。但提供服务的程序通常在后台运行和/或在启动时启动,因此为方便起见,启动它们的 shell 脚本会将其 pid 记录在运行文件中。

众所周知,程序终止后会留下一些杂散的 pid 文件,因此单独依赖 pid 文件可能会不可靠。

相关内容