2016-11-17 11 views
0

Я хочу запустить процесс в цикле, и если процесс возвращает 0, я должен перезапустить его. Если он прерывается, я должен захватить его трассировку стека (backtrace). Я использую subprocess.Popen() и .communicate() для запуска процесса. Теперь .returncode равно 134, то есть ребенок получил SIGABRT, есть ли способ захватить обратную трассировку (трассировку стека) дочернего элемента? Поскольку это инструмент для тестирования, я должен собрать всю необходимую информацию, прежде чем отправлять ее команде разработчиков.Python subprocess.Popen - Как захватить backtrace childs после abort

+1

показать код: P – eyllanesc

+0

Скорее всего отслеживающий печатается на стандартный вывод ... так что вы просто должны читать ребенку процесс stderr. –

+0

К сожалению, код защищен авторским правом. При запуске ручного обратного отсчета не печатается. – user2763554

ответ

0

Благодаря this сайт и последний комментарий @Marco, я могу принести трассировку из ядра

0

Что вы можете сделать, это перенаправить stdout и stderr вашего подпроцесса.Popen() в файл, а затем проверить это.

Поступая таким образом, можно будет проверить обратную линию позже «процесс завершения».

Хороший механизм каротажа даст вам следующее :-) Надеюсь, что эта помощь будет достаточной.

+0

При запуске ручного обратного отсчета не печатается. Ошибка ниже выводится, когда она прерывается: «Программный сигнал SIGABRT, отменен. 0x00007ffff5d06b55 in raise() из/lib64/libc.so.6'. То, что я хотел, это backtrace прямо от 'main()' до этого. – user2763554

+0

Чтобы увидеть обратную трассировку, вы используете некоторые специальные команды, такие как gdb, или разрешаете создавать основные файлы? К сожалению, я не эксперт в этом, но точка ... 1) если подпроцесс не возвращается 0, вы можете проверить созданный файл ядра. 2), как сказано прежде, чем вы можете перенаправить stderr и stdout в файл (но я сомневаюсь, что backtrace будет зарегистрирован так). 3) Проверьте журнал в системе linux, возможно, чтобы получить больше информации. –

+0

@ Макро да, во время работы вручную я использую gdb. Я знаю о ядре, но команда разработчиков предпочитает трассировку стека. backtrace не регистрируется в stdout и stderr. – user2763554

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

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