【发布时间】:2011-07-18 08:09:56
【问题描述】:
我目前正在开发一个需要单实例的 linux 守护程序(即限制为 1 个用户 1 个进程)。最好的方法是什么,而不必使用 getpid() 手动将 pid 写入 /var/run/ 然后使用 flock() 锁定它?
【问题讨论】:
-
您不必编写 pid 文件,但必须使用某种锁定文件。
-
写PID的好处是可以检查进程是否真的还活着,而且也很好......
-
@awoodland:不,你不能。除了进程的直接父进程之外,pid 是无用的,它可以确保在成功调用
wait-family 函数之前不会重用 pid。任何其他使用都会导致竞争条件、进程仍然存在的误报,甚至是发出错误进程信号的危险。 -
如果你想检查进程是否还活着,你可以打开你的守护进程并锁定一个文件。当它终止时,锁将自动放弃,并且没有竞争条件。使用 unix 套接字、强大的互斥锁以及可能的其他几种类似机制也可以实现相同的目标。