Ich implementiere ein einfaches System, um Jobs remote über SSH auszuführen. Mein Ziel ist es, den Job innerhalb eines auszuführen screen
, seine gesamte Ausgabe aufzuzeichnen script
und das Typescript auf einen Server hochzuladen, wenn der Job beendet wird. Ich habe jedoch Probleme mit der ordnungsgemäßen Handhabung von SIGTERM (z. B. wenn die Remote-Maschine heruntergefahren wird), da der script
Prozess beim Empfang von SIGTERM nicht beendet wird (stattdessen wird der darin ausgeführte Prozess script
zu einem Zombie).
Nehmen wir den folgenden Befehl an:
script -e -q -c 'ping www.google.com'
killall -TERM script
Wenn Sie zum Senden eines SIGTERM-Signals an den Prozess verwenden script
, scheint das SIGTERM-Signal an weiterzuleiten ping
(was ihn beendet), er wird jedoch zu einem Zombie-Prozess und wird script
nicht beendet:
> ps -aux | grep ping
karel 16460 0.0 0.0 10852 2732 pts/2 S+ 12:57 0:00 script -e -q -c ping www.google.com
karel 16461 0.1 0.0 0 0 ? Zs 12:57 0:00 [ping] <defunct>
Wenn ich das richtig verstehe, ping
ist der Prozess ein Zombie, weil der übergeordnete script
Prozess ihn noch beobachtet. Ist es jedoch möglich, die script
Beobachtung des Prozesses zu beenden und ihn ordnungsgemäß zu beenden (während das Typescript geleert wird)?