In Linux, ogni programma e demone è un "processo". La maggior parte dei processi rappresenta un unico programma in esecuzione. Altri programmi possono biforcare altri processi, come i processi per ascoltare determinate cose che accadono e quindi rispondere ad esse. E ogni processo richiede una certa quantità di memoria e potenza di elaborazione. Più processi hai in esecuzione, più memoria e cicli di CPU avrai bisogno. Sui sistemi più vecchi, come il mio laptop di sette anni, o computer più piccoli, come il Raspberry Pi, puoi ottenere il massimo dal tuo sistema se tieni d'occhio quali processi hai in esecuzione in background.
Puoi ottenere un elenco dei processi in esecuzione con ps comando. Di solito vorrai dare ps alcune opzioni per mostrare più informazioni nel suo output. Mi piace usare la -e opzione per vedere tutti i processi in esecuzione sul mio sistema e -f opzione per ottenere tutti i dettagli su ogni processo. Ecco alcuni esempi:
$ ps
PID TTY TIME CMD
88000 pts/0 00:00:00 bash
88052 pts/0 00:00:00 ps
88053 pts/0 00:00:00 head
$ ps -e | head
PID TTY TIME CMD
1 ? 00:00:50 systemd
2 ? 00:00:00 kthreadd
3 ? 00:00:00 rcu_gp
4 ? 00:00:00 rcu_par_gp
6 ? 00:00:02 kworker/0:0H-events_highpri
9 ? 00:00:00 mm_percpu_wq
10 ? 00:00:01 ksoftirqd/0
11 ? 00:00:12 rcu_sched
12 ? 00:00:00 migration/0
$ ps -ef | head
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 13:51 ? 00:00:50 /usr/lib/systemd/systemd --switched-root --system --deserialize 36
root 2 0 0 13:51 ? 00:00:00 [kthreadd]
root 3 2 0 13:51 ? 00:00:00 [rcu_gp]
root 4 2 0 13:51 ? 00:00:00 [rcu_par_gp]
root 6 2 0 13:51 ? 00:00:02 [kworker/0:0H-kblockd]
root 9 2 0 13:51 ? 00:00:00 [mm_percpu_wq]
root 10 2 0 13:51 ? 00:00:01 [ksoftirqd/0]
root 11 2 0 13:51 ? 00:00:12 [rcu_sched]
root 12 2 0 13:51 ? 00:00:00 [migration/0]
L'ultimo esempio mostra la maggior parte dei dettagli. Su ciascuna riga, l'UID (ID utente) mostra l'utente proprietario del processo. Il PID (ID processo) rappresenta l'ID numerico di ciascun processo e PPID (ID processo padre) mostra l'ID del processo che ha generato questo. In qualsiasi sistema Unix, i processi contano a partire da PID 1, il primo processo da eseguire all'avvio del kernel. Qui, sistema di sistema è il primo processo, che ha generato kthreadd . E kthreadd ha creato altri processi tra cui rcu_gp , rcu_par_gp , e un sacco di altri.
Gestione dei processi con il comando kill
Il sistema si occuperà da solo della maggior parte dei processi in background, quindi non devi preoccuparti di loro. Dovresti solo essere coinvolto nella gestione di tutti i processi che crei, di solito eseguendo applicazioni. Mentre molte applicazioni eseguono un processo alla volta (pensa al tuo lettore musicale o emulatore di terminale o gioco), altre applicazioni potrebbero creare processi in background. Alcuni di questi potrebbero continuare a funzionare quando esci dall'applicazione in modo che possano tornare a funzionare rapidamente al successivo avvio dell'applicazione.
La gestione dei processi è un problema quando eseguo Chromium, la base open source per il browser Chrome di Google. Chromium lavora abbastanza duramente sul mio laptop e avvia molti processi extra. In questo momento, posso vedere questi processi Chromium in esecuzione con solo cinque schede aperte:
$ ps -ef | fgrep chromium
jhall 66221 [...] /usr/lib64/chromium-browser/chromium-browser [...]
jhall 66230 [...] /usr/lib64/chromium-browser/chromium-browser [...]
[...]
jhall 66861 [...] /usr/lib64/chromium-browser/chromium-browser [...]
jhall 67329 65132 0 15:45 pts/0 00:00:00 grep -F chromium
Ho omesso alcune righe, ma ci sono 20 processi Chromium e un grep processo che sta cercando la stringa "chromium".
$ ps -ef | fgrep chromium | wc -l
21
Ma dopo che esco da Chromium, quei processi rimangono aperti. Come si fa a spegnerli e a recuperare la memoria e la CPU occupate da quei processi?
L'uccisione comando ti consente di terminare un processo. Nel caso più semplice, dici uccidi il PID di ciò che vuoi interrompere. Ad esempio, per terminare ciascuno di questi processi, dovrei eseguire il kill comando contro ciascuno dei 20 ID di processo Chromium. Un modo per farlo è con una riga di comando che ottiene i PID di Chromium e un'altra che esegue kill contro quella lista:
$ ps -ef | fgrep /usr/lib64/chromium-browser/chromium-browser | awk '{print $2}'
66221
66230
66239
66257
66262
66283
66284
66285
66324
66337
66360
66370
66386
66402
66503
66539
66595
66734
66848
66861
69702
$ ps -ef | fgrep /usr/lib64/chromium-browser/chromium-browser | awk '{print $2}' > /tmp/pids
$ kill $( cat /tmp/pids)
Queste ultime due righe sono la chiave. La prima riga di comando genera un elenco di ID di processo per il browser Chromium. La seconda riga di comando esegue il kill comando rispetto a quell'elenco di ID di processo.
Introduzione al comando killall
Un modo più semplice per fermare una serie di processi contemporaneamente è utilizzare killall comando. Come puoi intuire dal nome, killall termina tutti i processi che corrispondono a un nome. Ciò significa che possiamo usare questo comando per fermare tutti i nostri processi Chromium canaglia. Questo è semplice come:
$ killall /usr/lib64/chromium-browser/chromium-browser
Ma fai attenzione con killall . Questo comando può terminare qualsiasi processo che corrisponda a ciò che gli dai. Ecco perché mi piace usare prima ps -ef per controllare i miei processi in esecuzione, quindi esegui killall contro il percorso esatto del comando che voglio interrompere.
Potresti anche voler utilizzare il -i o --interattivo opzione per chiedere killall per chiederti prima che interrompa ogni processo.
uccidi tutti supporta anche le opzioni per selezionare processi che sono più vecchi di un'ora specifica utilizzando il -o o --più vecchio di opzione. Questo può essere utile, ad esempio, se scopri una serie di processi non autorizzati che sono stati eseguiti incustoditi per diversi giorni. Oppure puoi selezionare processi che sono più giovani di un tempo specifico, come i processi fuori controllo che hai avviato di recente. Usa -y o --minore-di opzione per selezionare questi processi.
Altri modi per gestire i processi
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
La gestione dei processi può essere una parte importante della manutenzione del sistema. All'inizio della mia carriera come amministratore di sistemi Unix e Linux, la capacità di eliminare i lavori sfuggiti era uno strumento utile per mantenere i sistemi funzionanti correttamente. Potrebbe non essere necessario uccidere i processi canaglia in un moderno desktop Linux, ma sapere kill e uccidi tutti può aiutarti quando le cose alla fine vanno storte.
Puoi anche cercare altri modi per gestire i processi. Nel mio caso, non avevo davvero bisogno di usare kill o uccidi tutti per interrompere i processi di Chromium in background dopo essere uscito dal browser. C'è una semplice impostazione in Chromium per controllarlo:
Tuttavia, è sempre una buona idea tenere d'occhio quali processi sono in esecuzione sul tuo sistema e sapere come gestirli quando necessario.