Mondo booleano

linux uccidi immagine di copertina

In un sistema operativo, ci sono molti programmi, che possono essere eseguiti da un utente o dal sistema operativo stesso (come i servizi di sistema). Tali programmi che sono in esecuzione sul sistema sono chiamati “processi”. Di solito, un processo termina da solo quando hanno finito con il loro compito, o quando si chiede loro di uscire premendo una scorciatoia da tastiera o facendo clic sul pulsante “Chiudi”.

Tuttavia, a volte un processo può riagganciare o consumare molta CPU o RAM. In questa situazione, si vorrebbe manualmente “uccidere” il processo. In questo articolo, vedremo vari strumenti che è possibile utilizzare per uccidere i processi su un sistema Linux.

Individuazione del processo da uccidere

Per uccidere un processo, è necessario innanzitutto individuare i dettagli del processo. Puoi farlo attraverso tre comandi:toppspidof epgrep. A seconda della situazione, è possibile utilizzare uno di questi comandi per questo scopo.

Come vedremo più avanti in questo articolo, puoi uccidere un processo con il suo nome o il suo ID processo (PID). Il PID è un numero che identifica in modo univoco un processo. Uccidere con l’ID del processo è utile quando si desidera uccidere solo un processo specifico. D’altra parte, uccidere con il nome del processo è utile quando si desidera uccidere tutte le istanze in esecuzione di un particolare programma.

Localizzando il processo con il comando superiore

Esamineremo prima il comandotop. Attiva il comando top digitando:

top

Otterrai un’interfaccia interattiva, come mostrato di seguito. È possibile sfogliare questo elenco per trovare il nome o il PID del processo che si desidera uccidere.

Il comando in alto che mostra un elenco di processi.

Per sfogliare questo elenco, è possibile utilizzare i tasti su / giù. Inoltre, il comando top ha anche modi per filtrare i processi in base all’utilizzo della CPU, ai nomi degli utenti e dei processi, che puoi leggere in questa guida.

La colonna più a sinistra contiene il PID del processo e il lato destro contiene il nome del programma. Ad esempio, nello screenshot qui sopra abbiamo il processovnstatd in esecuzione con un ID di processo di 263.

Individuazione del processo con ps e comandi grep

un Altro modo per ottenere un elenco di processo mediante l’esecuzione di:

ps aux

il comando di cui sopra, abbiamo utilizzato il flag aux che hanno i seguenti significati:

  • a: Mostra i processi di tutti gli utenti
  • u: Visualizza l’utente che utilizza il processo
  • x: Mostra tutti i processi. (Senza questo,ps non mostrerà i processi in esecuzione in un ambiente GUI.)

L’output del comando è simile a quello di top. Il PID è disponibile nella seconda colonna da sinistra e il nome del processo è disponibile nella colonna più a destra.

I risultati del comando" ps aux"."ps aux" command.

Il vantaggio di usare ps è che puoi facilmente filtrare questo elenco con il comando grep. Ad esempio, per trovare un processo associato al termine “vnstat”, è possibile utilizzare:

ps aux | grep -i vnstat

Processi di filtraggio con ps e grep, con un risultato positivo.

Qui, abbiamo ottenuto due risultati: il processo vnstatd, così come il processo grep. Dato che stavamo cercando tutte le istanze del termine “vnstat”, e stavamo anche eseguendo grep con “vnstat” come argomento, abbiamo ottenuto anche grep nei risultati.

Quindi, anche quando non ci sono processi correlati a “vnstat” in esecuzione, otterremmo una voce che mostra ilgrep processo:

Processi di filtraggio con ps e grep.

Quindi, anche se abbiamo ottenuto un risultato, non ci sono processi che ci interessano.

Trovare il PID con pidof e pgrep

La combinazionetop epsgrep ci consente di cercare i processi. D’altra parte, se si conosce il nome esatto di un processo, è possibile utilizzare pidof per trovare il suo PID.

Usare pidof è piuttosto semplice. Per ottenere i PID di un processo con il nome esatto di “nginx”, usa:

pidof nginx

Se ci sono processi con il nome esatto di” nginx”, otterrai un elenco di PID, come mostrato di seguito. Se non ce ne sono, non otterrai nulla come output.

Il comando pidof

Se non si conosce il nome completo, è possibile utilizzare pgrep invece di pidof. Ad esempio, per cercare tutti i processi che contengono “ngin” da qualche parte nel loro nome, esegui:

pgrep ngin

Questo abbinerà i processi con il nome esatto di “nginx”, così come qualsiasi altro processo che corrisponda agli stessi criteri. Per il nostro sistema, si noti che otteniamo tutti i PID che appartenevano a “nginx” nello screenshot sopra.

Il comando pgrep.

I comandi pidofepkill forniscono molte meno informazioni. Come vedremo nella prossima sezione, ci sono alcune circostanze in cui non si può uccidere un processo. L’output ditop eps contiene informazioni aggiuntive che consentono di determinare se si può davvero uccidere un processo.

Quali processi puoi uccidere?

Ora che abbiamo individuato il processo, è il momento di ucciderlo. Tuttavia, prima di imparare a farlo, ci sono alcune cose che dovete sapere.

Se sei un utente normale, puoi uccidere i tuoi processi, ma non quelli che appartengono ad altri utenti. Siatop cheps mostrano l’utente sotto il quale è in esecuzione un processo. Nel caso di top, la seconda colonna contiene il nome utente. Con ps aux, la prima colonna contiene il nome utente.

Tuttavia, un utente root può uccidere tutti i processi. È possibile aggiungeresudo prima di qualsiasi comando per eseguirlo come root, o ottenere una shell di root digitandosu, quindi eseguire il comando.

In Linux, quando un processo viene ucciso, un “segnale di terminazione” viene consegnato al processo. Sebbene ci siano molti tipi diversi di segnali, ci occupiamo principalmente dei segnali “SIGTERM” e “SIGKILL”. Hanno un valore numerico rispettivamente di 15 e 9. Per impostazione predefinita, tutti i comandi di uccisione del processo usano “SIGTERM”, che consente al programma di eseguire del codice prima che esca, permettendogli così di terminare”con grazia”. Se si desidera terminare il processo con la forza, è possibile utilizzare “SIGKILL”.

Il kernel Linux mantiene alcune informazioni relative allo stato di un processo. Quando un processo termina, il kernel deve mantenere le informazioni in giro, in modo che il processo padre possa scoprire se il processo figlio è stato in grado di completare i suoi compiti e se è terminato da solo o è stato ucciso. Fino a quando il genitore non lo ha fatto, questi processi” zombie ” appariranno nell’elenco dei processi. Non è possibile uccidere tale processo perché è solo una voce nell’elenco di tutti i processi e non ha un processo effettivo associato ad esso.

Quando un processo esegue operazioni di input / output (come la lettura da o la scrittura su dischi), si dice che sia in uno stato di “sonno ininterrotto”. Non puoi uccidere un processo mentre è in questo stato.

Puoi dire se un processo è nello stato “zombie”(Z) o “uninterruptible sleep”(D) guardando l’ottava colonna dell’outputtopps.

Uccidere un processo

Ci sono vari comandi che puoi usare per uccidere un processo — killkillallpkill etop. Inizieremo dal più semplice: il comando killall.

Uccidere i processi con il comando killall

Il comandokillall è uno dei modi più semplici per uccidere un processo. Se si conosce il nome esatto di un processo e si sa che non è in esecuzione come un altro utente e non è negli stati Z o D, è possibile utilizzare direttamente questo comando; non è necessario individuare manualmente il processo come descritto sopra.

Per impostazione predefinita, ad esempio, per uccidere un processo denominato “firefox”, eseguire:

killall firefox

Per uccidere forzatamente il processo con SIGKILL, eseguire:

killall -9 firefox

Puoi anche usare-SIGKILLinvece di-9.

Se si desidera terminare i processi in modo interattivo, è possibile utilizzare -i in questo modo:

killall -i firefox

Se si vuole uccidere un processo in esecuzione come un altro utente, è possibile utilizzare sudo:

sudo killall firefox

Si può anche uccidere un processo che è in esecuzione per un certo periodo di tempo con il -o e -y bandiere. Quindi, se si vuole uccidere un processo che è in esecuzione per più di 30 minuti, utilizzare:

killall -o 30m <process-name>

Se si vuole uccidere un processo che è in esecuzione per meno di 30 minuti, utilizzare:

killall -y 30m <process-name>

allo stesso modo, utilizzare le seguenti abbreviazioni per le rispettive unità di tempo:

s seconds
m minutes
h hours
d days
w weeks
M months
y years

Killing processes with the pkill command

Sometimes, you only know part of a program’s name. Proprio come pgreppkill consente di uccidere i processi in base a corrispondenze parziali. Per esempio, se si vuole uccidere tutti i processi che contengono il nome apache nel nome, eseguire:

pkill apache

Se si desidera utilizzare un segnale SIGKILL invece di un segnale SIGTERM, uso:

pkill -9 apache

di Nuovo, è inoltre possibile utilizzare -SIGKILL invece di -9.

Uccidere i processi con il comando kill

Usare il comando kill è semplice. Una volta che hai scoperto il PID del processo che vuoi uccidere, puoi terminarlo usando il comando kill. Ad esempio, se vuoi uccidere un processo con un PID di 1234, usa il seguente comando:

kill 1234

Come accennato in precedenza, il valore predefinito è usare un SIGTERM. Utilizzare un segnale SIGKILL, utilizzare -9 o -SIGKILL come abbiamo visto prima:

kill -9 1234

Uccidere i processi con il comando ” top “

e ‘ molto facile per uccidere i processi utilizzando il top comando. Innanzitutto, cerca il processo che vuoi uccidere e nota il PID. Quindi, premere k mentre top è in esecuzione (questo è case sensitive). Ti verrà chiesto di inserire il PID del processo che vuoi uccidere.

Dopo aver inserito il PID, premere invio. Ora chiederà quale segnale si desidera utilizzare per uccidere il processo. Se si desidera utilizzare SIGTERM (15), premere semplicemente invio poiché è il segnale predefinito. Se si desidera utilizzare SIGKILL(9), digitare 9 e premere invio.

Se si lascia vuoto l’ID del processo e si preme invio direttamente, terminerà il processo più in alto nell’elenco. È possibile scorrere utilizzando i tasti freccia, e cambiare il processo che si desidera uccidere in questo modo.

Conclusione

In questo post, abbiamo visto i vari modi per uccidere i processi in Linux. L’apprendimento di questi comandi è essenziale per una corretta amministrazione e gestione del sistema. Se vuoi esplorare più di questi comandi, dai un’occhiata alle rispettive pagine man.

Se ti è piaciuto questo post, si prega di condividerlo

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.