Python - 子进程死亡导致程序被挂起

时间:2015-04-09 01:40:17

标签: python bash subprocess ros

我通过类似以下的Python代码调用子进程:

proc = subprocess.Popen(["bash", "-ic", ". foo.bash && some_func_from_foo"])

我打开的其中一个进程会生成一堆子进程(或子进程,或分叉进程,不确定哪些进程),并且子进程的一个会死掉。这种垂死是可以预期的行为。但是,我希望实际的Python程序在这个节点终止时被中断,但是在子进程终止之后,Python程序被暂停,我看到[1]+ Stopped rosrun my_package my_app.py

更多细节:我正在从命令行运行ROS启动文件。当其中一个节点死亡时,它会提供以下类型的输出:

terminate called after throwing an instance of 'std::runtime_error'
  what():  ...
[my_node_name] process has died [pid 30816, exit code -6, ...]

然后Python程序被发送到后台,让我回到bash(我必须运行fg 1来恢复Python程序。)

有没有办法阻止Python进程被一个产生死亡的子进程的子进程背景化?

1 个答案:

答案 0 :(得分:0)

subprocess may thrown an exception。您是否尝试在try块中包装代码以处理错误?