Я вызов подпроцесса через некоторый код 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 для получения подпрограммы подпроцессом, который порождает ребенка, который умирает?
Что-то останавливает процесс 'rosrun', я думаю, а не ваш скрипт python (поскольку' rosrun' запускает ваш скрипт python, нет?). Что может означать этот процесс? –
Хмм, действительно, 'rosrun' запускает скрипт, я не запускаю его напрямую. Я предполагаю, что в этом случае должно произойти то, что команда 'roslaunch' возится с' rosrun', что я мог видеть, но не знаю, почему. Мне нужно будет опубликовать сообщение на http://answers.ros.org. –