GNU/Linux >> Linux Esercitazione >  >> Linux

Come uccidere un processo zombie su Linux

Buon Halloween Open SOURCE-rers!

Ecco una storia vecchia come epoca tempo. Da quando c'è stato C e Unix e (in seguito) Linux, abbiamo avuto zombi . In particolare, ci sono processi che vengono contrassegnati come processi zombie . Incompreso da alcuni, ignorato da altri e immune agli sforzi di tanti di noi che cercano di kill questi processi senza molto successo. Perché?

Cos'è un processo in Linux?

Tutto inizia quando un programma in Linux viene eseguito e, quando lo fa, la sua istanza in esecuzione viene chiamata processo. Puoi vedere tutti i processi nel tuo ambiente Linux con il ps comando.

$ 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]

A volte un processo avvia un altro processo, rendendo il primo processo padre del secondo. Il pstree command è un ottimo strumento che ti consente di vedere la "genealogia" dei processi sul tuo sistema.

$ 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)

A ogni processo viene assegnato un numero nel sistema. L'ID del processo numero 1 viene assegnato al primo processo eseguito durante il processo di avvio e ogni processo successivo dopo il PID 1 ne è un discendente. Il processo PID 1 è init , che nella maggior parte delle versioni più recenti di Linux è solo un collegamento simbolico a systemd programma.

Più risorse Linux

  • Comandi Linux cheat sheet
  • Cheat sheet sui comandi avanzati di Linux
  • Corso online gratuito:Panoramica tecnica RHEL
  • Cheat sheet della rete Linux
  • Cheat sheet di SELinux
  • Cheat sheet dei comandi comuni di Linux
  • Cosa sono i container Linux?
  • I nostri ultimi articoli su Linux

Chiudere un processo con il comando kill

Puoi terminare i processi in un sistema Linux con kill   comando . Nonostante il nome, il kill comando e una serie di altri come pkillkillall è stato scritto/progettato per inviare SEGNALI a uno o più processi. Quando non specificato, il SEGNALE predefinito che invia è il segnale SIGTERM per terminare il processo.

Quando un processo genitore muore o viene ucciso e il suo processo figlio non segue la morte del genitore, chiamiamo quel processo un processo orfano .

Come uccidere un processo zombi

I processi zombi, d'altra parte, non possono essere uccisi! Perché potresti chiedere? Bene, perché sono già morti!

Ogni processo figlio, una volta terminato, diventa un processo zombie e quindi rimosso dal genitore. Quando il processo esce dalla sua esistenza e rilascia le risorse che aveva utilizzato, il suo nome è ancora nella tabella dei processi del sistema operativo. È quindi compito del processo del genitore rimuovere il suo nome dalla tabella del processo. Quando ciò fallisce, abbiamo il processo zombie, che non è più un processo, ma solo una voce nella tabella dei processi del sistema operativo.

Questo è il motivo per cui provare a fare un kill comando anche con -9 L'opzione (SIGKILL) su un processo defunto (zombie) non funziona, perché non c'è nulla da uccidere.

Quindi, per uccidere un processo zombi, come per rimuovere il suo nome dall'elenco dei processi (la tabella dei processi), devi uccidere il suo genitore. Ad esempio, se il PID 5878 è un processo zombi e il suo genitore è PID 4809, per uccidere lo zombi (5878) devi terminare il genitore (4809):

$ sudo kill -9 4809  #4809 is the parent, not the zombie

La mia ultima parola di avvertimento sugli zombi. Fai molta attenzione quando uccidi i processi padre. Se il genitore di un processo è PID 1 e lo uccidi, ti riavvierai!

E quella sarà una storia ancora più spaventosa da raccontare!


Linux
  1. Come trovare e uccidere il processo Zombie in Linux

  2. Come uccidere un processo il cui genitore è init?

  3. Come uccidere un processo su Linux usando il comando?

  4. Come uccidere un processo in esecuzione su una particolare porta in Linux?

  5. Come uccidere il processo di zombi

Come uccidere i processi Zombie in Linux

Come uccidere i processi zombie in Ubuntu 20.04 LTS

Come eliminare l'esecuzione del processo Linux su una porta particolare

Come KILL un processo su Linux

Come uccidere o terminare un processo Linux:la guida definitiva

Come uccidere i processi zombi in Ubuntu