Я хочу запустить процесс в цикле, и если процесс возвращает 0, я должен перезапустить его. Если он прерывается, я должен захватить его трассировку стека (backtrace). Я использую subprocess.Popen()
и .communicate()
для запуска процесса. Теперь .returncode
равно 134, то есть ребенок получил SIGABRT, есть ли способ захватить обратную трассировку (трассировку стека) дочернего элемента? Поскольку это инструмент для тестирования, я должен собрать всю необходимую информацию, прежде чем отправлять ее команде разработчиков.Python subprocess.Popen - Как захватить backtrace childs после abort
ответ
Благодаря this сайт и последний комментарий @Marco, я могу принести трассировку из ядра
Что вы можете сделать, это перенаправить stdout и stderr вашего подпроцесса.Popen() в файл, а затем проверить это.
Поступая таким образом, можно будет проверить обратную линию позже «процесс завершения».
Хороший механизм каротажа даст вам следующее :-) Надеюсь, что эта помощь будет достаточной.
При запуске ручного обратного отсчета не печатается. Ошибка ниже выводится, когда она прерывается: «Программный сигнал SIGABRT, отменен. 0x00007ffff5d06b55 in raise() из/lib64/libc.so.6'. То, что я хотел, это backtrace прямо от 'main()' до этого. – user2763554
Чтобы увидеть обратную трассировку, вы используете некоторые специальные команды, такие как gdb, или разрешаете создавать основные файлы? К сожалению, я не эксперт в этом, но точка ... 1) если подпроцесс не возвращается 0, вы можете проверить созданный файл ядра. 2), как сказано прежде, чем вы можете перенаправить stderr и stdout в файл (но я сомневаюсь, что backtrace будет зарегистрирован так). 3) Проверьте журнал в системе linux, возможно, чтобы получить больше информации. –
@ Макро да, во время работы вручную я использую gdb. Я знаю о ядре, но команда разработчиков предпочитает трассировку стека. backtrace не регистрируется в stdout и stderr. – user2763554
показать код: P – eyllanesc
Скорее всего отслеживающий печатается на стандартный вывод ... так что вы просто должны читать ребенку процесс stderr. –
К сожалению, код защищен авторским правом. При запуске ручного обратного отсчета не печатается. – user2763554