Python-Signalhandler: Warum `print` zum Absturz führen kann

Is it safe to call print in a Python signal handler?

Python führt Signalhandler nicht direkt im C-Handler aus, sondern später im Interpreter. Doch Signalhandler sind unerwartet reentrant: Trifft ein Signal während eines laufenden Handlers ein, wird er erneut aufgerufen. Ein Stresstest mit 50 Signalen zeigt, dass `print` im Handler dann einen `RuntimeError` auslösen kann. Der Autor betont, dass dies extreme Umstände erfordert und für reale Programme selten relevant ist, rät aber weiterhin von komplexen Operationen in Signalhandlern ab.

Das Testprogramm zeigt, dass der Aufruf von `print` in einem Signalhandler unter extremen Umständen zum Absturz Ihres Programms führen kann.
  1. nine_k

    POSIX-Signale sind leider von Natur aus kaputt: https://lwn.net/Articles/414618/

    Ob Python oder nicht, fast nichts ist innerhalb eines Signal-Handlers sicher.

  2. IgorPartola

    Was wirklich Spaß macht, ist die Kombination von Signalbehandlung und Threads, besonders unter Linux. Es gibt einen einfachen Weg, das zu tun, und etwa tausend Wege, die mindestens eine Falle enthalten.

  3. jrumbut

    Ich denke, der Autor unterschätzt die Bedeutung davon. Ich kann mir leicht vorstellen, dass jemand Code schreibt, der im Grunde dem Beispiel entspricht; alles, was es braucht, ist eine Flut von Signalen und eine print-Anweisung.

    Wenn Ihr Programm Signale erzeugt, könnte es unbeabsichtigt eine Flut erzeugen. Wenn Sie eine print-Anweisung in den Handler setzen, können Sie dieses Ergebnis erhalten.

    Es ist nicht besonders überraschend, aber gut zu wissen.

Mehr von diesem Tag

2026-08-30