it-swarm.cn

pid和锁定文件有什么用?

我经常看到程序指定pid和lock文件。我不确定他们的工作。

例如,在编译nginx时:

--pid-path=/var/run/nginx.pid \
--lock-path=/var/lock/nginx.lock \

有人可以阐明这一点吗?

80
Stann

pid文件由某些程序编写,以在启动时记录其进程ID。这有多个目的:

  • 这是向其他进程和系统用户的信号,表明该特定程序正在运行或至少已成功启动。
  • 它允许人们编写一个非常容易检查脚本是否正在运行的脚本,并且如果要结束该脚本,则发出简单的kill命令。
  • 对于程序来说,查看先前运行的实例是否未成功退出是一种廉价的方法。

当然,仅存在pid文件并不能保证该特定进程的ID正在运行,因此,此方法不是100%可靠的,但是在许多情况下“足够好”。除非您希望依赖ps实用程序,否则检查进程表中是否存在特定的PID不能完全移植到类似UNIX的操作系统中,这在所有情况下都可能不希望调用(我相信某些类似UNIX的操作系统无论如何都实现ps)。

程序使用锁定文件来确保程序的两个(行为良好)单独的实例(它们可能在一个系统上同时运行)不会同时访问其他对象。这个想法是在程序访问其资源之前,它检查是否存在锁定文件,如果锁定文件存在,则出错或等待其消失。当它不存在时,想要“获取”资源的程序将创建文件,然后稍后可能遇到的其他实例将等待此过程完成。当然,这假设“获取”锁的程序确实释放了锁并且不会忘记删除锁文件。

之所以可行,是因为在所有类似UNIX的操作系统下,文件系统都强制执行序列化,这意味着在任何给定时间实际上仅对文件系统进行了一次更改。诸如此类的数据库锁。

90
LawrenceC

这些文件通常由守护程序使用,应仅在系统上运行一次。 PID文件通常包含已经启动并正在运行的程序的进程ID号(如果存在)。另外,启动时会创建锁定文件。只要锁文件存在,没有用户干预它就不会启动另一个文件。如果锁定文件存在并且pid文件中提到的进程ID没有运行,则该守护程序被视为处于“死”状态,这意味着该守护程序应该正在运行,但可能不是由于崩溃或关闭不当引起的。这可能会为某些程序启动特殊的启动/重启方案。正确关闭它将会删除锁定文件。

14
Caleb

PID文件将包含正在运行的进程的进程ID。这有多种用途。您可以阅读并检查该进程是否仍在运行,并采取适当的措施或阅读并杀死该进程。

锁定文件很可能是特定于应用程序的。锁定文件用于指示某些资源正在使用中,想要访问的进程应等到资源释放后再继续。

8
user591