Forza l'uscita dai processi che si comportano in modo anomalo utilizzando questi comandi di Linux
Per spiegare il significato di un "processo" con le parole più semplici è che si tratta di un'istanza in esecuzione di qualsiasi applicazione o programma sul sistema. Potresti eseguire più applicazioni contemporaneamente come la navigazione, l'ascolto di musica sul tuo terminale, ecc. Ci sono molti processi in background associati a queste applicazioni che vengono eseguiti dall'utente.
Ogni applicazione o programma che viene eseguito sul tuo sistema crea più processi associati alla tua singola applicazione. A volte questo può essere un problema e sbarazzarsi di questi processi è l'unica opzione che hai.
"Uccidere" un processo è un'opzione utile che Linux fornisce per interrompere i processi in corso, che si tratti di un processo in primo piano o in background. In questo articolo, esamineremo i comandi come uccisione
, pkill
e uccidi tutti
per forzare l'uscita da qualsiasi processo su un sistema.
Perché uccidere un processo?
Comprendere il concetto di interruzione di un processo è importante prima di procedere in questo tutorial. Uccidere può sembrare un modo molto brutale per esprimere il concetto, ma ciò che significa in senso figurato è interrompere con la forza un processo.
Ora, perché interrompere o chiudere un processo in corso? Quando più processi sono in esecuzione in background, tutti o alcuni di essi potrebbero non funzionare correttamente e causare un comportamento anomalo del sistema. Ciò ritarda le attività in corso poiché il processo malfunzionante potrebbe bloccare il sistema per un po'.
A volte, l'uscita da tutti i processi che si comportano in modo anomalo sembra essere l'unica opzione per ripristinare la normalità del sistema. Linux ti permette di uccidere un processo usando il pid
o il nome del processo.
Usando il pgrep
comando
La maggior parte degli utenti Linux ha familiarità con il grep
comando. Il pgrep
il comando può essere usato su linee simili di grep
.
pgrep
comando quando utilizzato, visualizza il pid
del processo in esecuzione come specificato nel comando. Questo comando si rivelerà molto utile durante l'utilizzo di pkill
comando.
Sintassi generale:
pgrep [opzioni] [schema]
Opzioni importanti disponibili con il pgrep
comando
Opzione | Descrizione |
-u | elenca l'id del processo di proprietà di un utente specifico |
-C | contare il numero di processi corrispondenti |
-IO | elenca solo i nomi dei processi |
-un | elenca il percorso completo del nome del processo |
Dimostriamo l'uso di pgrep
comando usando un esempio.
pgrep -u gaurav gnomo
Qui, desideriamo vedere il pids
del processo gnome di proprietà dell'utente 'gaurav'. Opzione -u
ti permette di elencare i pids
dei processi di proprietà di uno specifico utente. In questo caso, l'utente gaurav.
Produzione:
gaurav@ubuntu:~$ pgrep -u gaurav gnomo 1752 1755 1909 1922 2021 2576 4279 gaurav@ubuntu:~$
Mentre procediamo con questo tutorial, pgrep
Il comando ci aiuterà a confermare se il processo è stato interrotto o è ancora in esecuzione.
Passiamo ora al pkill
comando e la sua esecuzione.
Usando pkill
comando
Puoi usare il pkill
comando in Linux per terminare il processo utilizzando il nome del processo. Anche se non conosci il pid
di qualche processo, anche allora puoi uccidere quel particolare processo usando il pkill
comando.
I processi possono essere specificati con il loro nome completo o il nome parziale durante l'utilizzo del pkill
comando. Anche se inserisci il nome parziale del processo, il pkill
comando abbinerà tutti i processi in esecuzione con il nome corrispondente che hai inserito nel comando.
Sintassi:
pkill [opzioni][process_name_pattern]
Esempio:
Mostriamo i processi attualmente in esecuzione utilizzando il superiore
comando. Puoi anche usare il ps
comando per elencare i processi.
superiore
top - 14:24:02 up 3:12, 1 utente, carico medio: 0.29, 0.48, 0.58 Attività: 221 totali, 1 in esecuzione, 172 in sospensione, 0 fermi, 1 zombi %Cpu(s): 5.6 us, 1.0 sy , 0.0 ni, 92.9 id, 0.4 wa, 0.0 hi, 0.1 si, 0.0 st KiB Mem: 3928240 totale, 610456 libero, 2233152 usato, 1084632 buff/cache KiB Swap: 4083708 totale, 3378884 libero, 704824 usato. 1187268 disp Mem PID UTENTE PR NI VIRT RES SHR S %CPU %MEM TIME+ COMANDO 4077 gaurav 20 0 3312128 673480 118360 S 19,6 17,1 15:13.23 Contenuto Web 3712 gaurav 20 0 3953008 453544 116476 S 4.0 11,5 9:28.39 MainThread 2010 gaurav 20 0 4084232 111096 45024 S 1,7 2,8 3:14.85 guscio di gnomo 1197 radice 20 0 1039612 33704 22988 S 1,0 0,9 3:04.42 Xorg 1426 couchdb 20 0 3772396 16908 2520 S 0,7 0,4 1:50,83 beam.smp 3288 gaurav 20 0 722480 25048 18272 S 0,7 0,6 0:06.84 gnome-terminal- 3915 gaurav 20 0 2804900 231524 111228 S 0,7 5,9 0:54.42 Contenuto Web 4146 gaurav 20 0 3017924 245304 120604 S 0,7 6,2 2:01.21 Contenuto Web 4417 gaurav 20 0 2964208 234396 119160 S 0,7 6,0 0 :59.90 Contenuto Web 4860 gaurav 20 0 3066800 372920 132544 S 0,7 9,5 0:48.20 Contenuto Web 16007 gaurav 20 0 41944 3780 3116 R 0,7 0,1 0:00.28 top
Usando superiore
comando visualizzerà più processi sul tuo terminale. Proviamo a visualizzare il processo con un nome particolare. Useremo il grep
comando per visualizzare un processo il cui nome corrisponde alla stringa "mongo".
in alto | grep -i mongo
Nota: Qui, ho usato l'opzione -i per rendere la ricerca insensibile alle maiuscole.
L'output di questo comando visualizzerà i processi che corrispondono al nome 'mongo'
1158 mongolo 20 0 288564 4848 1320 S 0,7 0,1 1:03.22 mongolo 1158 mongolo 20 0 288564 4848 1320 S 1,0 0,1 1:03.25 mongolo 1158 mongolo 20 0 288564 4848 1320 S 0,7 0,1 1:03.27 mongolo 1158 mongolo 20 0 288564 4848 1320 S 0,7 0,1 1:03,29 mongolo 1158 mongolo 20 0 288564 4848 1320 S 0,7 0,1 1:03,31 mongolo 1158 mongolo 20 0 288564 4848 1320 S 0,7 0,1 1:03,33 mongolo 1158 mongolo 20 0 288564 4848 1320 S 1,0 0,1 1:03,36 mongolo 1158 mongolo 20 0 288564 4848 1320 S 0,7 0,1 1:03,38 mongolo 1158 mongolo 20 0 288564 4848 1320 S 0,7 0,1 1:03,40 mongolo 1158 mongolo 20 0 288564 4848 1320 S 1,0 0,1 1:03,43 mongolo 1158 mongolo 20 0 288564 4848 1320 S 0,7 0,1 1:03.45 mongolo 1158 mongolo 20 0 288564 4848 1320 S 1,0 0,1 1:03,48 mongolo 1158 mongolo 20 0 288564 4848 1320 S 0,3 0,1 1:03,49 mongolo 1158 mongolo 20 0 288564 4848 1320 S 1,0 0,1 1:03,52 mongolo 1158 mongolo 20 0 288564 4848 1320 S 0,7 0,1 1:03,54 mongolo 1158 mongolo 20 0 288564 4848 1320 S 1,0 0,1 1:03,57 mongolo
Ora useremo il pkill
comando per terminare il processo denominato "mongo".
pkill mongo
Questo comando ora ucciderà il processo mongo. Possiamo confermare se il processo è stato forzato a uscire usando il pgrep
comando che visualizza il pid
del processo in esecuzione secondo i criteri specificati dall'utente.
gaurav@ubuntu:~$ pgrep mongo gaurav@ubuntu:~$
Questo comando non restituirà alcun valore. Ciò conferma che il processo 'mongo' viene ora ucciso usando il pkill
comando.
Opzioni usate frequentemente con pkill
comando
Durante l'utilizzo del pkill
comando avremo bisogno delle opzioni menzionate per un uso corretto e senza sforzo del pkill
comando.
Opzioni | Descrizione |
-F | corrispondenza con argomenti completi inclusi spazi, virgolette, caratteri speciali |
-u | per informare il processo pkill in modo che corrisponda al processo eseguito dall'utente specificato |
-1 | ricarica il processo |
-9 | uccide il processo |
-15 | interrompe con grazia un processo |
Vediamo un altro esempio di pkill
comando usando il -F
opzione.
Ci sono due comandi attualmente in esecuzione sul terminale come mostrato di seguito.
ping bbc.com ping youtube.com
Entrambi i processi sono avviati dal ping
comando. Ora, supponiamo di voler terminare un solo processo "ping youtube.com", quindi dobbiamo usare il -F
opzione con il pkill
comando che uccide un processo con un nome specifico inclusi gli spazi e le virgolette dal nome del processo.
Comando:
gaurav@ubuntu:~$ pkill -f "ping youtube.com" gaurav@ubuntu:~$
Risultato:
gaurav@ubuntu:~$ ping youtube.com PING youtube.com (142.250.67.206) 56(84) byte di dati. 64 byte da bom12s08-in-f14.1e100.net (142.250.67.206): icmp_seq=1 ttl=117 time=30.9 ms 64 byte da bom12s08-in-f14.1e100.net (142.250.67.206): icmp_seq=2 ttl =117 tempo=121 ms 64 byte da bom12s08-in-f14.1e100.net (142.250.67.206): icmp_seq=206 ttl=117 tempo=86.5 ms 64 byte da bom12s08-in-f14.1e100.net (142.250.67.206 ): icmp_seq=207 ttl=117 time=105 ms Terminato gaurav@ubuntu:~$
Qui, il “ping youtube.com
" Il processo è ora terminato e il "ping bbc.com
" è ancora in esecuzione sul terminale.
Nel caso, se avessimo usato il pkill ping
comando, avrebbe ucciso entrambi i ping
processi, il che è indesiderabile.
Segnali usati con pkill
comando
pkill
forza l'uscita di un processo inviando un segnale specifico a quel processo. Ci sono tre possibili segnali che pkill
comando potrebbe inviare al processo a seconda del comando che l'utente dà.
Di seguito l'elenco dei segnali disponibili.
Segnale | Specifiche |
1 (HUP ) | ricarica il processo specificato |
9 (UCCISIONE ) | uccide il processo specificato |
15 (TERMINE ) | interrompe o interrompe delicatamente il processo specificato |
Per questo tutorial, faremo molto affidamento su UCCISIONE
segnale. Facciamo qualche esempio per capirlo meglio.
Usando il pgrep
comando per ottenere il pid
corrispondenza con il nome apache.
gaurav@ubuntu:~$ pgrep apache 1218 10402 10403 gaurav@ubuntu:~$
pkill -KIll apache
OPPURE puoi anche usare il comando con i numeri (es. 1, 9, 15)
pkill -9 apache
Entrambi i comandi mostrati sopra uccideranno il processo apache. Confermando con il pgrep
comando di nuovo.
gaurav@ubuntu:~$ pgrep apache gaurav@ubuntu:~$
Come la pgrep
Il comando non restituisce alcun output, dimostra che il processo apache è stato ucciso.
Conclusione
In questo tutorial, abbiamo appreso del pkill
comando e come viene utilizzato per terminare il processo utilizzando direttamente il nome del processo. Abbiamo anche appreso del pgrep
comando che viene utilizzato per recuperare l'id del processo eseguito da qualsiasi utente specifico. Il pgrep
Il comando ci consente di effettuare un controllo incrociato se il processo viene terminato.