.pid文件是否可靠用于确定进程是否正在运行?

许多程序(如sshd)在/ var / run /中创build包含其进程ID的.pid文件。 这些文件是否可靠用于确定进程是否正在运行? 我的猜测是这些文件是由进程手动创build的,因此如果程序崩溃,它们仍然会保留在文件系统中。

简单地说, no :一个进程(例如一个守护进程)可能会崩溃,而没有时间去清除它的.pid文件。

一种技术是更确定一个程序的状态:使用一个明确的通信渠道,如套接字。 在一个文件中写入套接字端口并让supervisor进程查找它。

你也可以在Linux上使用DBus的服务:注册一个特定的名字,让你的主pipe进程(不pipe你怎么称呼它)检查这个名字。

有许多技术。

有一件事要记住:pipe理PID文件不是操作系统的责任。

Jldupont是正确的,说明.pid文件是不可靠的,以确定是否进程正在运行,因为该文件可能不会在发生崩溃的情况下被删除。

抛开竞争条件,当我需要知道一个过程是否正在运行时,我经常使用pgrep 。 如果我觉得有必要的话,我可以将输出与.pid文件进行交叉引用。

Jldupont是正确的。

但是,您可以发送进程0信号(kill -s 0 pid)来查看进程是否还活着(假设您有权发送这样的信号 – 通常,只有进程的所有者可以发送它是一个信号)。

简单地检查文件中包含的与pid相同的进程的存在是不可靠的。

但是许多pidfile实现也locking了pidfile,所以如果进程死了,锁就会消失。 如果locking机制是可靠的,那么检查文件是否仍被locking是确定原始过程是否仍在运行的相对可靠的机制。

我同意jschmier。

在某些系统上,您不能访问pgrep。 在这种情况下,你可以做ps -aef | grep <pid> ps -aef | grep <pid>来确定进程是否真的在运行。