Python 3.3+Linux · macOSfaulthandlerфункция
faulthandler.register()
дамп по сигналу
Назначает сигналу (например, SIGUSR1) вывод стека всех потоков — заглянуть в работающую программу снаружи. Linux и macOS.
Синтаксис
faulthandler.register(signum, file=sys.stderr, all_threads=True, chain=False)
На Windows функции нет. Типичный приём: register(signal.SIGUSR1) при старте, а когда сервис «подвис» — kill -USR1 <pid> из терминала, и стек появится в stderr, а программа продолжит работу. Сигналы аварий (SIGSEGV, SIGABRT…) так назначить нельзя — RuntimeError с советом использовать enable(). chain=True вызывает и прежний обработчик сигнала.
Примеры
import faulthandler, signal
with open('sig.txt', 'w') as f:
faulthandler.register(signal.SIGUSR1, file=f, all_threads=False)
signal.raise_signal(signal.SIGUSR1)
faulthandler.unregister(signal.SIGUSR1)
print(open('sig.txt').read().splitlines()[0]) # → Stack (most recent call first):
import faulthandler, signal
try:
faulthandler.register(signal.SIGSEGV)
except RuntimeError as e:
print(e) # → signal 11 cannot be registered, use enable() instead
См. также
Частые ошибки
Открыть в полном глоссарииdocs.python.orgСообщить о неточности