我有一个 cron 作业,每 8 小时启动一个 shell 脚本,进而调用一堆程序。有时这些程序不会正常终止,并且会陷入困境。
如果我的 cron 脚本 (run_foo_bar.sh
) 看起来像这样:
python foo.py
python bar.py
...我可以同时运行多个 foo 和 bar。现在,我通过执行 ps -ax |grep foo 来获取 PID,然后使用 ps -p $PID -o etime= 查找运行时,但这会很麻烦。
Python 程序有一堆调试语句被打印到控制台,并且 shell 脚本本身通过管道传输到日志文件。我想找到一种方法,可以在调用每个进程后回显其 PID 及其调用时间,因此我的 run_foo_bar.sh 看起来像这样:
date
python foo.py
<some magic to find PID>
echo foo.py is running as PID $PID
date
python bar.py
<some magic to find PID>
echo bar.py is running as PID $PID
最佳答案
因此,为了完整起见,在 Python 方面,您可以执行以下操作:
import os, sys
print(os.getpid())
sys.stdout.flush()
转储当前 PID。您可能希望将其打印到文件而不是终端,以便可以从该文件中获取它。
在 shell 中,由于您只是等待 cron 作业运行,因此另一个选项是这样的(从 this answer 修改):
python foo.py & echo "$!" > "some file somewhere that will hold the PID" ; fg
在后台运行python foo.py
,保存python
进程的pid(位于$!
中的每个this) ,然后返回python
到前台,这样就可以正常运行了。
关于python - 查找 shell 脚本中调用的每个进程的 pid,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41506781/