我的平台是 Raspberry Pi 2 中的 ROS Ubuntu。我通过运行 python 节点启动了一个 shell 脚本来重新启动所有进程。但是,当我终止 python 节点时,python 节点启动的所有内容也会被终止。
Python:
from subprocess import call
call(['bash', 'run.sh'])
我的问题:
- 有没有什么办法可以终止并重新启动 python 中的进程?
- 是否有可能终止 python 节点但保持由该 python 节点启动的进程处于活动状态?
答案1
假设我们通过 运行某种 Python 脚本python stuff.py
。我们可以通过以下方式轻松找到它的 PIDpgrep
$ pgrep -f stuff.py
7573
pkill
并以类似的方式杀死。
$ pkill -f stuff.py
如果您只想终止子进程,而不终止脚本本身,那么我们需要找出子进程。ps
命令允许使用 PPID(父进程 PID)打印进程。因此,如果您知道父进程(您的 python 脚本),那么您也知道子进程。
$ ps -e -o args,pid,ppid | grep $(pgrep -f run_bash.py ) | grep -v grep
python run_bash.py 8186 4021
watch ls 8187 8186
这里我的 python 脚本运行watch ls
命令。我可以 kill 8187 来关闭watch ls
,然后让 python 脚本继续执行其他操作。