启动python脚本的Bash脚本不会自行停止

时间:2014-05-22 10:26:09

标签: python bash shell process

我不确定这实际上是不是问题,但让我解释一下:我有一个由bash脚本启动的python脚本。然后bash脚本的工作完成了,但是当我点击ps aux时,呼叫仍然存在。

#!/bin/bash
export http_proxy='1.2.3.4:1234'
python -u /home/user/folder/myscript.py -some Parameters >> /folder/Logfile_stout.log 2>&1 

如果我要ps aux | grep python,我会得到python -u /home/user/folder/myscript.py -some Parameters。根据日志文件,python脚本正确关闭。 (结束脚本的代码在脚本本身内。) 脚本每小时开始一次,我仍然可以看到前几个小时的所有电话。

提前感谢您的帮助,提示或建议!

1 个答案:

答案 0 :(得分:2)

只要子(python脚本)正在运行,父bash脚本就会保留。 如果你启动在后台运行的python脚本(添加&在python行的末尾),那么父将退出。

#!/bin/bash
export http_proxy='1.2.3.4:1234'
python -u /home/user/folder/myscript.py -some Parameters >> /folder/Logfile_stout.log 2>&1 &

如果您检查进程列表(例如' ps -elf')。它将显示孩子(如果仍在运行)。子PPID(父PID)将为1(根PID)而不是父PID,因为父级不再存在。

如果您的python脚本永远不会退出,那么最终可能会出现问题。 你可以让父脚本等待并杀死孩子,例如等待30秒并杀死孩子,如果它仍然存在:

#!/bin/bash
export http_proxy='1.2.3.4:1234'
python -u /home/user/folder/myscript.py -some Parameters >> /folder/Logfile_stout.log 2>&1 &
sleep 30
jobs
kill %1
kill -9 %1
jobs