【发布时间】:2011-10-17 10:05:27
【问题描述】:
在 C 语言中,如何以编程方式确定某个进程是否已在 Linux/Ubuntu 上运行以避免它启动两次?我正在寻找类似于 pidof 的东西。
【问题讨论】:
-
(您也许可以在启动程序时在已知位置创建一个临时“锁定”文件,然后只需检查该文件是否存在(并在关机时将其删除 - 尽管如果您遇到问题程序意外终止))
-
@marnir - 这就是为什么您让程序将自己的 PID 写入文件,然后如果文件存在,您可以检查该 PID 是否仍然处于活动状态,如果是,如果进程名称与您自己的匹配。这不是 100% 万无一失的,但异常终止不应该经常发生那样。
-
如果“锁定文件”中包含了程序的PID,几乎在所有情况下都可以检测到程序异常终止(是否存在PID与PID文件匹配的正在运行的进程)?这不是一个完美的解决方案(PID 数量有限,PID 回收)。
-
@marnir - 如果您确实锁定了锁定文件,则锁定将在进程退出时释放。程序只是尝试一个非阻塞的独占锁,如果失败,其他人正在运行。
-
老实说,stackoverflow.com/questions/5460702/… 看起来是一个清晰、简单的解决方案