查找在shell脚本中调用的每个进程的pid

时间:2017-01-06 13:27:50

标签: python bash shell ubuntu cron

我有一个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

1 个答案:

答案 0 :(得分:1)

为了完整起见,在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到前台所以它可以正常运行。