在磁盘上标记unix进程/存储pid?

时间:2014-10-31 02:59:38

标签: bash unix

所以,我需要运行一个程序,跟踪它的PID(至少在内存中),然后杀死该程序。有任何想法吗?我的直接想法是用稍后我能找到的东西来标记这个过程,但这似乎是一个半身像。我的下一个想法是将PID存储在磁盘上,但我不知道这种事情的惯例是什么。有任何想法吗?谢谢!

3 个答案:

答案 0 :(得分:2)

您的程序可以在/var/run/下创建一个目录来存储此类文件。例如,如果您的程序是myprog,它可能会在启动时将其PID存储在

/var/run/myprog/PID

如果您的程序可能同时运行多个实例,您可以在文件名中使用PID本身及其启动时间,以确保每个实例的唯一文件名。

/var/run/myprog/201410302306.1283.pid

(请注意,如果您在文件名中使用PID,那么如果您实际在文件本身中写入PID,则取决于您;空文件就足够了。)

答案 1 :(得分:1)

最直接(和常见的情况)是,正如您和chepner已经提到的,将其存储在pid文件中。为此:

如果它是系统范围的程序:

/var/run/prog.pid

如果系统安装的程序可能多次运行:

/var/run/prog/prog_instance.pid

如果是用户本地程序:

$HOME/.prog/prog.pid

其他选项可能是使用pgrep来查找它,只要您可以唯一地定义调用命令。例如,传递一个未使用的伪参数并将其用于检索:

$ prog.sg --instance_1234 &
$ pgrep -f -- '--instance_1234'
3523

答案 2 :(得分:0)

您可以使用start-stop-daemon启动程序并稍后将其终止。它有很多选项来查找程序,最有用的是--pid,它存储和检索文件系统中文件的pid,通常在/var/run中(注意文件系统权限写入)

有关更多提示,请参见手册页。