Come uccidere il processo per nome in Linux

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

OpzioneDescrizione
-uelenca l'id del processo di proprietà di un utente specifico
-Ccontare il numero di processi corrispondenti
-IOelenca solo i nomi dei processi
-unelenca 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.

OpzioniDescrizione
-Fcorrispondenza con argomenti completi inclusi spazi, virgolette, caratteri speciali
-uper informare il processo pkill in modo che corrisponda al processo eseguito dall'utente specificato
-1ricarica il processo
-9uccide il processo
-15interrompe 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.

SegnaleSpecifiche
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.