467 Stimmen

Wie kann man am besten ein Signal an alle Mitglieder einer Prozessgruppe senden?

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.

0voto

Nullpointer Punkte 1637

Dieses Skript funktioniert auch:

#/bin/sh while true do echo "Enter parent process id [type quit for exit]" read ppid if [ $ppid -eq "quit" -o $ppid -eq "QUIT" ];then exit 0 fi for i in `ps -ef| awk '$3 == '$ppid' { print $2 }'` do echo killing $i kill $i done done

0voto

jens Punkte 21

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

0voto

Morgan Punkte 4143

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

-3voto

Typ ps -ef prüfen Sie die Prozess-ID. Beenden Sie den Prozess durch Eingabe von kill -9 <pid>

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X