ich zu stoppen wollen ein Signal von Script-A.sh senden so in Script-A.sh Script-B.sh i verwenden Sie den BefehlWie sende ich ein Signal SIGINT von Skript zu Skript? BASH
(senden SIGINT Script-B.sh)
kill -2 $ PID_Script-B.sh
und in Script-B.sh fangen i das Signal und Anruffunktion reinigen
Falle 'Clean' 2
Es funktioniert nicht, stattdessen wird das Script-.B.sh sofort getötet, ohne die Clean !!
Was ich bemerken ist auch, dass, wenn ich von Terminal zu jedem Skript SIGINT möchten senden, die sie einfängt, wird ein ctrl-c
richtig eingefangen werden, aber nicht, wenn ich das Signal über den Befehl kill -2 $pid_of_script
Jede Idee geben über der Unterschied zwischen den beiden Methoden zum Senden des SIGINT (ctrl-c
VS kill -2 $pid_of_script
), und wie kann ich ein SIGINT von einem Skript zum anderen senden?
Grüße,
Debugger
Das erste Bit von bash (1) scheint eine Erklärung. Außerdem scheint * zsh * OK zu funktionieren. –
Entschuldigung für diese späte Antwort. Du hast recht, nicht alle Signale können für Kinder eingefangen werden, aber manche. SIGUSR1 hat für mich genauso funktioniert wie SIGTERM, aber nicht in allen Bash-Versionen, weil ich einen Segmentierungsfehler von einem Skript in bash 3.00.16 bekommen habe, als ich versucht habe, das Signal vom Vater an den Sohn zu senden !!! Andere Zeiten, die die gleiche Version verwenden, werden das Signal ignorieren, ohne es abzufangen (in der Kinderebene). Aber neuere Versionen funktionieren gut und verbreiten alle Signale korrekt. Vielen Dank für Ihre Hilfe. – Debugger
ok. Führen Sie scriptA Shell-Skript aus und rufen Sie scriptB (source it) wie ". scriptB.sh param1 param2 .. paramN" auf. So fängt es sauber für Sig 2/INT –