2015-04-09 2 views
1

Я вызов подпроцесса через некоторый код Python, похожий на следующий: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 отправляется на задний план, поставив меня в Баш (я должен запустить fg 1 возобновить программу Python).

Есть ли способ предотвратить процесс Python для получения подпрограммы подпроцессом, который порождает ребенка, который умирает?

+0

Что-то останавливает процесс 'rosrun', я думаю, а не ваш скрипт python (поскольку' rosrun' запускает ваш скрипт python, нет?). Что может означать этот процесс? –

+0

Хмм, действительно, 'rosrun' запускает скрипт, я не запускаю его напрямую. Я предполагаю, что в этом случае должно произойти то, что команда 'roslaunch' возится с' rosrun', что я мог видеть, но не знаю, почему. Мне нужно будет опубликовать сообщение на http://answers.ros.org. –

ответ

0

subprocessmay thrown an exception. Вы пробовали обернуть свой код в попытке, кроме блока, чтобы справиться с ошибками?

+0

Почему исключение помещает скрипт в фоновом режиме вместо того, чтобы его убить? –

+0

Строка 'subprocess.Popen' выполняется немедленно и успешно, так как она просто открывает сценарий фона, поэтому, где бы я поставил блок try/except? –

 Смежные вопросы

  • Нет связанных вопросов^_^