【问题标题】:Check that another instance of program already running检查另一个程序实例是否已经在运行
【发布时间】:2014-07-30 23:07:11
【问题描述】:

如何检查另一个程序实例是否已经在 UNIX 系统下运行?如果是这样,exit()

当进程开始时,我已经使用了filepid。然后我检查pid 它是否存在。但是有时程序会因意外行为而运行,并且我有大量程序正在运行。

【问题讨论】:

  • 如果您希望不公开您的代码,很难说出实际出了什么问题。
  • @πάνταῥεῖ 似乎在新的 pid 写入文件之前和另一个实例读取文件并做出决定是否运行并写入其他 pid 之前有一些间隔。所以,并发开始。我想尝试一些其他算法。
  • '意外的海狸'多么可爱的“blooper”:-D。像“哎呀!未刮胡子:-/”之类的东西......
  • 标题中的语言无需提及;这就是标签的用途。无论如何,语言的名称是 C++,而不是 cpp;名称“cpp”通常指的是 C 预处理器。

标签: c++ unix freebsd


【解决方案1】:

使用适当的同步机制(例如process shared semaphore),以防止启动您的程序两次。

【讨论】:

  • 链接线程上的描述“听起来不错”。不会阻止一些“如何”的代码。可惜那个帖子的作者还没有添加它。
  • @abrahab 是的,可能不是我首先选择的最佳链接。我已经改了,试试this one 它更适合你需要恕我直言。
  • 上一个链接和这个有一些区别。互斥量与信号量 :) 在第一个链接 stackoverflow.com/questions/1748902/…
  • @abrahab '之前的链接有些不同...' 是的,当然,这就是我改变它的原因。希望这个能给你更多的价值,解决你的问题。
【解决方案2】:

如果您正在将 pid 写入文件,那么您应该使用flock 序列化对该文件的访问。

【讨论】:

    猜你喜欢
    • 2011-03-12
    • 2010-10-02
    • 2014-03-30
    • 2011-02-12
    • 1970-01-01
    • 1970-01-01
    • 2012-06-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多