Ich möchte einen ganzen Prozessbaum töten. Wie kann ich das am besten mit einer der gängigen Skriptsprachen erreichen? Ich bin auf der Suche nach einer einfachen Lösung.
Antworten
Zu viele Anzeigen?In sh listet der Befehl jobs die Hintergrundprozesse auf. In einigen Fällen kann es besser sein, den neuesten Prozess zuerst zu beenden, z.B. wenn der ältere einen gemeinsamen Socket erstellt hat. In solchen Fällen sortieren Sie die PIDs in umgekehrter Reihenfolge. Manchmal möchte man einen Moment warten, bis die Jobs etwas auf die Festplatte geschrieben haben oder ähnliches, bevor sie beendet werden.
Und tötet nicht, wenn ihr nicht müsst!
for SIGNAL in TERM KILL; do
for CHILD in $(jobs -s|sort -r); do
kill -s $SIGNAL $CHILD
sleep $MOMENT
done
done
Wenn Sie die Pid des Objekts kennen, das Sie töten wollen, können Sie normalerweise von der Session-ID ausgehen und alles in derselben Session ausführen. Ich würde es noch einmal überprüfen, aber ich habe dies für Skripte verwendet, die rsyncs in Schleifen starten, die ich beenden möchte, und nicht einen weiteren starten (wegen der Schleife), wie es der Fall wäre, wenn ich rsync einfach killall'd.
kill $(ps -o pid= -s $(ps -o sess --no-heading --pid 21709))
Wenn Sie die PID nicht kennen, können Sie immer noch mehr verschachteln
kill $(ps -o pid= -s $(ps -o sess --no-heading --pid $(pgrep rsync )))
- See previous answers
- Weitere Antworten anzeigen