最近我遇到了一个扩展名为.pid的文件,但是打开后内容很少。文档中提到:
Pid文件是一个文件,其中包含了进程标识号(pid),存储在文件系统的一个确定位置中,因此其他程序可以查找运行脚本的pid。
有没有人可以解释更多关于pid文件的内容或者指导我查找pid文件的详细信息?
pid文件包含了一个程序的进程ID(一个数字)。例如,Apache HTTPD 可以将其主进程号写入pid文件中(这是一个普通的文本文件,仅此而已),然后再使用其中所包含的信息来停止自身。您还可以使用该信息来手动杀死该进程,使用 cat filename.pid | xargs kill
我不确定这是否是唯一的原因,但以下是我的解决方案:
根据您编写杀死所需进程的shell脚本的方式,您可能会在它杀死目标之前杀死kill PID,让我们以mydaemon为例:
kill -9 `ps ax | grep mydaemon | awk '{ print $1 }'`
A) SIGPIPE-ing kill 在32位Linux中,PID通常是15位整数,溢出经常发生,grep或awk的PID出现在mydaemon之前的几率相当大。在64位PID中,数字通常是22位,发生的可能性要小100倍以上,但仍然相当可行。
通过杀死您的任一管道,您将收到SIGPIPE信号,通常这意味着失败,因此在杀死mydaemon之前会杀死kill,使得杀死尝试失败。
B) 杀死其他PID 另外,假设您同时运行vi /etc/mydaemon/mydaemon.conf,那么该PID也可能被杀死,更不用说其他用户的进程了,因为您很可能会以root身份发出这样的命令。
C) 这是一个简单的类Unix锁 -> 不需要额外的代码/守护程序。 PidFiles提供了一种相当简单的方法来创建用户可管理的锁,以防止意外重复生成守护程序。
Pidfile 包含进程的 pid。这是一种约定,允许长时间运行的进程更加自我感知。服务器进程可以检查它以停止自身,或者具有启发式,表明其其他实例已经在运行。Pidfiles 也可以用于方便地手动杀死风险,例如 pkill -F <some.pid>
要了解pid文件,请参考DOC
有时候,某些应用程序需要额外的插件和工具支持。因此,它使用这个pid文件来跟踪这些插件和工具进程的运行ID以供参考。
这就是为什么每当您重新启动一个应用程序时,所有必要的插件和依赖应用程序都必须重新启动,因为pid文件将变得过时。
echo
和cat
相比于仅使用cat filename.pid | xargs kill
,是否有优势? - Simon A. Eugstercat
。只需使用xargs -a filename.pid kill
即可。即使它没有该选项,使用输入重定向运算符仍然比cat更好。 - Tim Seguine