bash: Warum kann ich keinen Trap für SIGINT in einer Hintergrundshell setzen?

8

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?

%Vor%

Ausgabe:

%Vor%     
Stuart Berg 05.09.2017, 19:01
quelle

1 Antwort

6

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).

    
PSkocik 05.09.2017, 19:04
quelle

Tags und Links