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
}