在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 */
但是这样的黑客会在其他系统上运行吗?无论如何,它应该是一个标准的任务,已有30多年的解决方案。
发现了一个类似的问题here,但未能找到我问题的明确答案。
谢谢。
答案 0 :(得分:1)
/ proc / date的文件时间回到at least 1991;见p。 243.而且,虽然mtime可以伪造(例如通过touch -m --date=<needed_date> <target_file>
),但对于userland应用程序,无法在其自己的/ proc / entry上执行此操作。