Hier ist ein einfaches Programm, das zwei trap
Handler registriert und sie dann mit trap -p
anzeigt. Dann macht es dasselbe, aber in einem Kind-Hintergrund-Prozess.
Warum ignoriert der Hintergrundprozess die SIGINT
-Falle?
Ausgabe:
%Vor% SIGINT
und SIGQUIT
werden in Hintergrundprozessen ignoriert (außer wenn sie mit set -m
on umgeben sind). Es ist eine (seltsame) POSIX-Anforderung (siehe Ссылка oder meine SO-Frage Warum ignorieren Shells SIGINT und SIGQUIT in Hintergrundprozessen? für weitere Details ).
Zusätzlich erfordert POSIX Folgendes:
Wenn eine Untershell eingegeben wird, müssen Traps, die nicht ignoriert werden, sein auf die Standardaktionen eingestellt, außer im Falle eines Befehls Substitution, die nur einen einzigen Trap-Befehl enthält.
Aber selbst wenn Sie den INT-Handler nach dem Zurücksetzen erneut in der Subshell setzen, kann die Subscell nicht empfangen werden, weil sie ignoriert wird (Sie können es versuchen oder Sie können die Signal-Ignoriermaske mit% co_de untersuchen) %, beispielsweise).
Tags und Links bash