Šťastný Halloween Open SOURCE-rers!
Zde je příběh starý jako epocha čas. Od té doby, co existuje C a Unix a (později) Linux, máme zombie . Konkrétně existují procesy, které jsou označeny jako proces zombie . Některými nepochopený, ostatními ignorován a imunní vůči úsilí tolika z nás, kteří se snaží kill
tyto procesy bez valného úspěchu. Proč?
Co je to proces v Linuxu?
Vše začíná spuštěním programu v Linuxu, a když se tak stane, jeho běžící instance se nazývá proces. Všechny procesy ve vašem prostředí Linux můžete zobrazit pomocí ps
příkaz.
$ ps -ax
PID TTY STAT TIME COMMAND
1 ? Ss 0:01 /usr/lib/systemd/systemd rhgb --switched-root --sys
2 ? S 0:00 [kthreadd]
3 ? I< 0:00 [rcu_gp]
4 ? I< 0:00 [rcu_par_gp]
Někdy proces spustí jiný proces, čímž se první proces stane rodičem druhého. pstree
command je skvělý nástroj, který vám umožní vidět „genealogii“ procesů ve vašem systému.
$ pstree -psn
systemd(1)─┬─systemd-journal(952)
├─systemd-udevd(963)
├─systemd-oomd(1137)
├─systemd-resolve(1138)
├─systemd-userdbd(1139)─┬─systemd-userwor(12707)
│ ├─systemd-userwor(12714)
│ └─systemd-userwor(12715)
├─auditd(1140)───{auditd}(1141)
├─dbus-broker-lau(1164)───dbus-broker(1165)
├─avahi-daemon(1166)───avahi-daemon(1196)
├─bluetoothd(1167)
Každému procesu je v systému přiděleno číslo. Proces ID číslo 1 se přiřadí úplně prvnímu procesu spuštěnému během procesu bootování a každý následující proces po PID 1 je jeho potomkem. Proces PID 1 je inicializace , což je ve většině novějších verzí Linuxu pouze symbolický odkaz na systemd
program.
Další zdroje pro Linux
- Cheat pro příkazy Linuxu
- Cheat sheet pro pokročilé příkazy systému Linux
- Bezplatný online kurz:Technický přehled RHEL
- Síťový cheat pro Linux
- Cheat sheet SELinux
- Cheat pro běžné příkazy pro Linux
- Co jsou kontejnery systému Linux?
- Naše nejnovější články o Linuxu
Ukončení procesu pomocí příkazu kill
Procesy v systému Linux můžete ukončit pomocí kill
příkaz. Navzdory názvu je to kill
příkaz a sadu dalších, jako je pkill
a kill
byl napsán/navržen tak, aby posílal SIGNÁLY do jednoho nebo více procesů. Pokud není specifikováno, výchozí SIGNÁL, který vysílá, je signál SIGTERM pro ukončení procesu.
Když nadřazený proces zemře nebo je zabit a jeho podřízený proces nenásleduje po zániku jeho rodiče, nazýváme tento proces osiřelý proces .
Jak zabít proces zombie
Zombie procesy na druhou stranu zabít nelze! Proč se můžete ptát? No, protože už jsou mrtví!
Každý podřízený proces, když je ukončen, se stane zombie procesem a poté ho odstraní rodič. Když proces ukončí svou existenci a uvolní prostředky, které použil, jeho název je stále v tabulce procesů operačního systému. Úlohou nadřazeného procesu je pak odstranit jeho název z tabulky procesů. Když to selže, máme proces zombie, který už ve skutečnosti není proces, ale pouze záznam v tabulce procesů operačního systému.
To je důvod, proč se pokoušíte o kill
příkaz i s -9
Možnost (SIGKILL) na zaniklém (zombie) procesu nefunguje, protože není co zabít.
Chcete-li tedy zabít zombie proces, jako když chcete odstranit jeho jméno ze seznamu procesů (tabulky procesů), musíte zabít jeho rodiče. Pokud je například PID 5878 zombie proces a jeho rodič je PID 4809, pak pro zabití zombie (5878) ukončíte nadřazený proces (4809):
$ sudo kill -9 4809 #4809 is the parent, not the zombie
Moje poslední slovo varování před zombiemi. Buďte velmi opatrní při zabíjení rodičovských procesů. Pokud je rodič procesu PID 1 a vy ho zabijete, restartujete se!
A to bude ještě děsivější příběh!