【问题标题】:Detecting a stale pid file in a Unix environment在 Unix 环境中检测过时的 pid 文件
【发布时间】:2017-03-05 11:26:02
【问题描述】:

在 Unix 环境中检测陈旧 pid 文件的标准跨平台方法是什么?假设我想杀死我的应用程序的旧实例,但如果该应用程序已经退出,我当然不想破坏具有相同 PID 的不相关进程。

现在我找到了一种在我的 Ubuntu(因此可能还有其他基于 GNU/Linux 的系统)上执行此操作的方法 - 伪代码如下:

if ( mtime(pid_file) < mtime( "/proc/"+pid ) ) {
     /* process started AFTER the file creation */
     /* so it's not what we're looking for */
     unlink(pid_file);
     return 0;
};
/* proceed to kill & do all stuff */

但是这样的 hack 会在其他系统上起作用吗?无论如何,这应该是一项标准任务,并且有 30 多年的解决方案。

找到了一个类似的问题here,但没能找到我的问题的明确答案。

谢谢。

【问题讨论】:

    标签: unix language-agnostic pid


    【解决方案1】:

    /proc/ 的文件时间可以追溯到at least 1991;见第243. 而且,虽然 mtime 可以被伪造(例如通过touch -m --date=&lt;needed_date&gt; &lt;target_file&gt;),但对于用户级应用程序来说,没有办法在其自己的 /proc/ 条目上这样做。

    【讨论】:

      猜你喜欢
      • 2017-01-22
      • 2015-03-04
      • 2014-05-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-10
      • 2017-06-19
      相关资源
      最近更新 更多