GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Warum ist der untergeordnete Prozess noch am Leben, nachdem der übergeordnete Prozess in Linux beendet wurde?

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
}

Linux
  1. Linux – Wann sollte ich keinen -9 A-Prozess beenden?

  2. Funktionsweise des Linux-Prozesslebenszyklus – Eltern-, Kind- und Init-Prozess

  3. kill-Befehlsbeispiele in Linux

  4. Was hat meinen Prozess zerstört und warum?

  5. Wie kann man einen untergeordneten Prozess nach einem bestimmten Timeout in Bash beenden?

So beenden Sie einen Prozess in Linux

Kill-Befehl unter Linux

So beenden Sie Zombie-Prozesse in Linux

5 schnelle Möglichkeiten, einen Prozess in Linux zu beenden

Wie man einen Prozess unter Linux beendet

Warum kann ich diesen Prozess unter Linux nicht beenden?