GNU/Linux >> Znalost Linux >  >> Linux

Proč podřízený proces stále žije poté, co byl nadřazený proces v Linuxu zabit?

Ne, když zabijete proces sám, nezabije to děti.

Musíte poslat signál do skupiny procesů pokud chcete, aby všechny procesy pro danou skupinu přijímaly signál

Pokud má například ID vašeho nadřazeného procesu kód 1234, budete muset zadat parentpid přidáním symbolu mínus a za ním ID vašeho nadřazeného procesu:

kill -9 -1234

V opačném případě budou sirotci spojeni s init , jak ukazuje váš třetí snímek obrazovky (PPID dítěte je 1).


-bash:kill:(-123) - Žádný takový proces

V interaktivní relaci Terminal.app se ID číslo skupiny procesů na popředí a ID skupiny procesů na pozadí liší podle návrhu, když je povolen režim řízení/monitorování úlohy. Jinými slovy, pokud spustíte příkaz na pozadí v relaci Terminal.app s povoleným řízením úloh, $! pid procesu na pozadí je ve skutečnosti nové ID skupiny procesů (pgid).

Ve skriptu, který nemá povoleno řízení úloh, to však nemusí být tento případ! Pid procesu na pozadí nemusí být nový pgid, ale normální pid! A to je to, co způsobuje chybovou zprávu -bash: kill: (-123) - No such process , pokouší se zabít skupinu procesů, ale pouze specifikuje normální pid (místo pgid) do kill příkaz.

# 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. Proč není Pgid procesů dítěte PGID rodiče?

  2. Jak nechat podřízený proces zemřít po odchodu rodiče?

  3. Jak zabít podřízený proces po daném časovém limitu v Bash?

  1. Jak zabít proces zombie na Linuxu

  2. Podřízený proces obdrží SIGINT rodiče

  3. Jak zabít zombie proces

  1. Proč jsem přešel z Macu na Linux

  2. Linux – Kdy nemám zabít -9 A proces?

  3. Proč není Sigint propagován do podřízeného procesu, když je odeslán jeho nadřazenému procesu?