Nein, wenn Sie einen Prozess alleine beenden, werden die Kinder nicht getötet.
Sie müssen das Signal an die Prozessgruppe senden wenn Sie möchten, dass alle Prozesse für eine bestimmte Gruppe das Signal erhalten
Wenn Ihre übergeordnete Prozess-ID beispielsweise den Code 1234 hat, müssen Sie die parentpid angeben, indem Sie das Symbol Minus gefolgt von Ihrer übergeordneten Prozess-ID hinzufügen:
kill -9 -1234
Andernfalls werden Waisen mit init
verknüpft , wie Ihr dritter Screenshot zeigt (PPID des Kindes wurde 1).
-bash:kill:(-123) - Kein solcher Prozess
In einer interaktiven Terminal.app-Sitzung unterscheiden sich die Gruppen-ID-Nummer des Vordergrundprozesses und die Gruppen-ID-Nummer des Hintergrundprozesses, wenn der Auftragssteuerungs-/Überwachungsmodus aktiviert ist. Mit anderen Worten, wenn Sie einen Befehl in einer Terminal.app-Sitzung mit aktivierter Auftragssteuerung im Hintergrund ausführen, wird der $!
pid des Prozesses im Hintergrund ist tatsächlich eine neue Prozessgruppen-ID-Nummer (pgid).
In einem Skript ohne aktivierte Jobsteuerung ist dies jedoch möglicherweise nicht der Fall! Die PID des Prozesses im Hintergrund darf keine neue PGID sein, sondern eine normale PID! Und das verursacht die Fehlermeldung -bash: kill: (-123) - No such process
, versuchen, eine Prozessgruppe zu beenden, aber nur eine normale PID (anstelle einer pgid) für kill
anzugeben Befehl.
# the following code works in Terminal.app because $! == $pgid
{
sleep 100 &
IFS=" " read -r pgid <<EOF
$(ps -p $! -o pgid=)
EOF
echo $$ $! $pgid
sleep 10
kill -HUP -- -$!
#kill -HUP -- -${pgid} # use in script
}