我正在尝试为自己构建的自定义服务构建一个不错的服务 bash 脚本,我的问题是我需要仅根据文件路径来确定进程是否正在运行。
通过所有的谷歌搜索,我找到了如何找到 PID 路径的答案,但我需要完全相反的答案。
假设我的可执行文件位于 /home/monitor/script.py
它的执行方式如下:python /home/monitor/script.py
有了这个,我怎样才能找到正在运行的进程 ID?
答案1
尝试使用 ps 按名称查找脚本:
ps -f -C python | grep /home/monitor/script.py
-C 标志告诉 ps 列出名为“python”的进程,-f 提供包括命令行在内的“完整”输出,而 grep 则挑选出正确的 python 进程。pid 是行中的第二个字段。
答案2
(假设使用 Linux,你也许能够解析出一些东西/proc
- 但是,不要这样做)
如果您的脚本需要知道它是否已在运行,请让它在运行时将 PID 写入某处。然后,您的脚本可以在启动时查看该位置以查看它是否已在运行。
当然,这假设您不想同时运行多个实例;如果这样做,请在命令行上传递一个可配置的 PID 文件路径,或类似的东西。
答案3
用于找出 python(2.7) 进程的 bash 命令:
$ lsof | awk '$9 ~ /^\/usr\/lib\/python2\.7/ {print $0}'
您可以从获得的输出中修改上述命令。我在这里得到了不同的结果。