A volte uccidere un processo è l'unico modo per sbarazzarsene. Nonostante il nome aspro, "uccidere" un processo significa semplicemente "costringerlo a smettere". Ecco come farlo dalla riga di comando di Linux o macOS.
Cos'è un processo?
I programmi in esecuzione come il browser Web, i processi in background associati all'ambiente desktop ei servizi di sistema Linux sono tutti processi.
Puoi raggruppare i processi in due gruppi:
- Processi in primo piano sono quelli che sono stati avviati o avviati da un utente. Possono essere in una finestra di terminale o possono essere un'applicazione grafica.
- Processi in background sono tutti i processi che vengono avviati automaticamente e non hanno alcuna interazione con gli utenti. Non si aspettano input dagli utenti né presentano risultati o output. I processi in background sono cose come servizi e daemon.
Se i processi in primo piano sono la parte anteriore dello staff del teatro e gli attori, i processi in background sono la squadra del backstage "dietro le quinte".
Quando i processi si comportano in modo anomalo o non funzionano correttamente, possono consumare troppo tempo della CPU, consumare la RAM o entrare in un ciclo di calcolo stretto e non rispondere. Le applicazioni grafiche possono rifiutarsi di rispondere ai clic del mouse. Le applicazioni terminali potrebbero non riportarti mai al prompt dei comandi.
La risposta umana
"Uccidere" un processo significa semplicemente "costringere il processo a terminare". Ciò potrebbe essere necessario se il processo si rifiuta di rispondere.
Linux fornisce il
uccidere
,
pkill
, e
uccidi tutti
comandi per permetterti di fare proprio questo. Questi comandi possono essere utilizzati con qualsiasi tipo di processo, grafico o riga di comando, primo piano o sfondo.
Il comando kill
Usare
uccidere
, è necessario conoscere l'ID di processo (PID) del processo che si desidera terminare. Il
ps
può essere utilizzato per trovare il PID di un processo.
Avere
ps
cercare in tutti i processi utilizzare il
-e
opzione (tutti i processi). Condurre l'uscita attraverso
Di meno
è consigliabile, ce ne sarà un bel po '. genere
ps
, Uno spazio,
-e
, Uno spazio,
|
(un carattere pipe), un altro spazio e quindi digitare
Di meno
. Premere Invio per eseguire il comando.
ps -e | Di meno
Questo ti darà un elenco di processi simile allo screenshot qui sotto. Puoi cercare in avanti in
Di meno
usando il
/
e puoi cercare all'indietro usando il
?
chiave.
Per capire meglio il processo che ti interessa, convoglia l'output da
ps
attraverso
presa
e specificare il nome, o parte del nome, del processo.
ps -e | presa dell'otturatore
Una volta individuato il PID del processo che desideri terminare, passalo al file
uccidere
comando come parametro. Per terminare il
otturatore
processo identificato dal comando precedente, utilizzare questo comando:
uccidere 2099
Il
uccidere
il comando è un assassino silenzioso: non ti dà alcun feedback se ha avuto successo.
Il comando pkill
Il
pkill
comando consente di terminare uno o più processi in base al nome. Non è necessario identificare il processo tramite PID. Usare
pkill
fornisci un termine di ricerca che
pkill
utilizza per confrontare l'elenco dei processi in esecuzione. I processi di abbinamento vengono terminati. Quindi devi essere sicuro di aver digitato correttamente il termine di ricerca.
Come rete di sicurezza, puoi usare il
pgrep
comando
prima
usi il
pkill
comando. Il
pgrep
il comando accetta anche un termine di ricerca. Elencherà il PID di ogni processo che corrisponde al termine di ricerca. Questo è sicuro perché
pgrep
non emetterà alcun segnale di kill ai processi e se digiti erroneamente il termine di ricerca non interromperai un altro processo per errore. Puoi assicurarti di aver pensato correttamente al termine di ricerca prima di passarlo a
pkill
. Tutti e due
pkill
e
pgrep
tratta il termine di ricerca allo stesso modo. Il loro trattamento è così simile che loro
condividere la stessa pagina man
.
Supponiamo che ci sia un processo con "subq" nel nome. Useremo il
ps -u dave | grep
comando per dare un'occhiata dietro le quinte. Puoi vedere che "subq" corrisponderà a quel processo e solo a quel processo. Solo così puoi vedere il nome completo del processo.
ps -u dave | grep subq
Supponiamo che il nostro utente
non ha
Fatto; tutto quello che sanno è che il nome del processo contiene la sottostringa "subq." Usano
pgrep
per verificare che sia presente una sola corrispondenza con il termine di ricerca. Quindi usano quel termine di ricerca con
pkill
.
pgrep subq
pkill subq
Puoi usare
pkill
per terminare più processi contemporaneamente. Qui l'utente corre
pgrep
per verificare quanti processi ha avviato Chrome. Usano
pkill
per ucciderli tutti. Quindi controllano con
pgrep
che sono stati tutti rimossi.
pgrep cromato
pkill chrome
pgrep cromato
Se sono in esecuzione più processi con lo stesso nome, ma non si desidera ucciderli tutti, è possibile utilizzare
pgrep
con il
-f
(riga di comando) per identificare quale processo è quale. Un semplice esempio sarebbero due
ping
processi. Vuoi uccidere uno di loro ma non l'altro. Puoi usare le loro righe di comando per distinguerli. Notare l'uso delle virgolette per racchiudere il parametro della riga di comando.
pgrep -f "ping 192.168.4.22"
pkill -f "ping 192.168.4.22"
Il comando killall
avvertimento
: Nei sistemi operativi Solaris e OpenIndiana il
uccidi tutti
comando sarà
uccidere tutti i processi che ti appartengono
. Se sei root o se hai rilasciato
sudo killall
riavvierai il tuo computer! Durante la ricerca per questo articolo, questo comportamento è stato confermato con l'ultima versione di OpenIndiana Hipster 2018.10.
Il
uccidi tutti
comando
funziona in modo simile
al
pkill
comando ma con una differenza specifica. Invece di passare un termine di ricerca al comando, è necessario fornire il nome esatto del processo.
Non è possibile fornire una corrispondenza parziale a un nome di processo; è necessario fornire l'intero nome del processo, come mostrato:
killall shutt
otturatore killall
Il
-Y
L'opzione (minore di) consente di terminare i processi in esecuzione da
Di meno
di un periodo specificato. Il periodo è espresso in numeri seguiti da una di queste unità:
- s (secondi)
- m (minuti)
- h (ore)
- d (giorni)
- w (settimane)
- M (mesi, nota, "M" maiuscola)
- y (anni)
Per uccidere un processo chiamato
madre
che è stato appena avviato e lascia le istanze precedenti di
madre
in esecuzione, è possibile utilizzare i seguenti parametri con
uccidi tutti
, se hai reagito entro due minuti:
Diminuisci me o me
Il
-Il
L'opzione (più vecchio di) consente di terminare i processi in esecuzione da più di un periodo specificato. Questo comando ucciderà tutti
ssh
connessioni in esecuzione da più di un giorno:
killall -o 1d sshd
Non essere troppo felice con il grilletto
Questi comandi ti permetteranno di identificare e terminare correttamente i processi errati con precisione e sicurezza.
Sii sempre cauto. Innanzitutto, assicurati che il processo che stai per uccidere sia davvero quello che desideri. Secondo, ricontrolla: fai attenzione e assicurati che il processo mirato sia quello che desideri terminare. Procedi con l'interruzione del processo una volta che sei soddisfatto.