Изящная обработка ошибки Segfault

#python #linux #scripting #segmentation-fault

#python #linux #написание сценариев #ошибка сегментации

Вопрос:

Я пишу программу на Python, которая использует API с закрытым исходным кодом в Linux. API иногда работает, а иногда segfaults — сбой моей программы также. Однако, если программа выполняется в течение 10 секунд, она прошла точку, в которой у нее есть шанс сбоя в сегменте, и выполняется вечно (ошибки случаются только в начале).

Я думаю, мне нужен какой-то скрипт, который:

запускает мою программу на python,

ожидает 10 секунд,

проверяет, все ли еще запущен python

если он запущен, скрипт должен завершиться сам, не завершая python

если python НЕ запущен, то повторите.

Возможна ли такая программа? Приведет ли ошибка segfault к завершению работы скрипта?

Ответ №1:

Да, такая программа вполне возможна. Вам просто нужно запустить эти две программы в отдельных процессах — SEGFAULT убивает только тот процесс, в котором это произошло.

Если вы работаете под управлением Linux, вы можете использовать либо bash, либо python, если хотите. Просто запустите скрипт, который завершается сбоем в отдельном процессе. Код на python может выглядеть примерно так:

 import subprocess
import time

start = time.clock()
ret = subprocess.call(['myprog', 'myarg0', ...])
end = time.clock()
if end - start > threshold:
    restart()
  

Кроме того, возможно, код возврата из такого процесса имеет какое-то значимое значение, когда он завершается из-за SEGFAULT.

Ответ №2:

Можете ли вы изолировать вызовы этого багги API внутри дочернего процесса? Таким образом, вы можете проверять статус завершения и обрабатывать сбои в течение Try ... Catch