GNU/Linux >> Linux Esercitazione >  >> Linux

Come uccidere o terminare un processo Linux:la guida definitiva

I sistemi operativi multiprocessing come Linux e BSD utilizzano diversi metodi per massimizzare l'utilizzo della CPU. Un processo è semplicemente un programma in esecuzione. Poiché ci sarà più di un processo Linux in esecuzione in un dato momento, la gestione dei processi in Linux è estremamente cruciale. Gli utenti spesso devono affrontare problemi come la limitazione delle risorse della CPU durante l'esecuzione di troppi programmi. Situazioni come questa emergono quando la CPU non riesce a gestire il numero crescente di processi. Sebbene ciò non dipenda interamente dalla potenza della tua CPU, gestire processi bloccati o zombi può essere piuttosto frustrante. Per aiutarti a mitigare tali eventi, stiamo delineando alcuni metodi standard per interrompere questi processi.

Gestione dei processi che non rispondono in Linux

Imparerai diversi modi per terminare un processo Linux che non risponde affatto. Se provieni da Windows, potresti avere familiarità con Ctrl+Alt+Canc. Allo stesso modo, gli utenti Mac hanno il metodo Command+Option+Escape per uccidere i processi bloccati. Linux è molto più versatile delle sue controparti e offre più di un metodo per affrontare i processi morti o che non rispondono.

Diversi metodi per eliminare un processo Linux morto

Delineeremo principalmente due metodi per uccidere i processi di zombi. Useremo il terminale Linux per il primo metodo. Per questo, dovremo prima identificare l'id del processo. Una volta ottenuto con successo, possiamo utilizzare questo PID per terminare il programma inviando segnali specifici a quel PID.

Imparerai anche come eseguire tali kill job Linux dall'interfaccia utente grafica o dalla finestra X. Sfrutteremo il "Monitoraggio di sistema" applicazione disponibile in Ubuntu per questo. Sebbene questa sia un'applicazione GNOME, strumenti simili sono disponibili per altri ambienti desktop Linux.

Termina un processo che non risponde dalla riga di comando

Esistono diversi strumenti per terminare un processo che non risponde o si è bloccato dalla riga di comando, incluso kill , pkill e uccidi tutti . Questi comandi funzionano inviando segnali specifici a questi processi che non rispondono. Avrai bisogno dell'ID del processo o del PID informazioni in modo da poter inviare loro il segnale di terminazione richiesto.

Il PID o ID processo è un numero univoco che identifica un processo. Questi vengono creati dal kernel Linux durante il runtime e lo scheduler dei processi controlla le loro attività della CPU. Quindi, ogni volta che invochi un'applicazione, il kernel genererà prima i processi necessari e assegnerà loro questi valori PID univoci. Possono esserci più PID associati a un processo. Inoltre, ogni processo ha un unico processo padre con un PPID (Parent Process ID) univoco.

Quindi, se riesci a scoprire questo PPID, sarai in grado di inviare un segnale di uccisione utilizzando programmi progettati per questo scopo. Di seguito imparerai come controllare i processi in esecuzione in Linux e identificare il loro PPID dal terminale.

Scopri le informazioni PPID

- -

Puoi scoprire il PPID di un processo utilizzando diversi comandi di gestione dei processi in Linux, come pidof , pstree e pgrep . Esaminiamoli uno per uno e vediamo come ottenere il PID di un processo Linux.

Metodo 1:utilizzo del comando ps

Il comando ps in Linux mostra tutti i processi in esecuzione insieme ad altre informazioni relative al processo come il PID nel terminale. Possiamo usare questo comando per elencare tutti i processi e quindi filtrare un processo specifico usando i comandi Linux grep. Dovrebbe mostrarci le informazioni sull'ID del processo che ci interessano.

$ nano > /dev/null &
$ ps aux | grep "nano"

Innanzitutto, abbiamo invocato un editor di testo Linux in background. Quindi abbiamo usato il comando ps insieme al comando grep per scoprire il PPID di questo editor. L'output può contenere diversi ID di processo, ma siamo interessati solo al primo poiché è il nostro PPID. Possiamo anche usare il comando awk di Linux per scoprire queste informazioni, come mostrato di seguito.

$ ps aux | awk '/nano/ {print $2}'

Questo comando è più flessibile poiché sopprime tutte le informazioni irrilevanti. Mostrerà solo le informazioni PPID che stiamo cercando.

Metodo 2:utilizzo del comando pstree

Il comando pstree fornisce una vista ad albero di tutti i processi in esecuzione. Fornisce una vista grafica dell'elenco delle attività di Linux dalla finestra del terminale. È possibile visualizzare il PPID e tutte le informazioni PID di un processo utilizzando questo comando. Dai un'occhiata agli esempi seguenti per scoprire come sfruttare pstree per trovare il PPID di un processo specifico.

$ nano > /dev/null &
$ pstree -p | grep 'nano'
$ pstree -p | awk '/nano/ {print $NF}'

Innanzitutto, abbiamo generato un processo in background utilizzando il primo comando. Il secondo comando recupera quindi il PPID di questo processo utilizzando il comando grep in Linux. Infine, il terzo comando ci mostra come recuperare questo valore usando il comando awk.

Metodo 3:utilizzo del comando pgrep

Il comando pgrep è uno dei comandi di gestione dei processi più semplici in Linux. Controlla l'elenco di tutti i processi in esecuzione e stampa il PPID di un determinato processo nello standard output o nel terminale nel nostro caso. Funziona eseguendo la corrispondenza delle espressioni regolari ed è estremamente adatto per scrivere script di shell Linux.

$ nano > /dev/null &
$ pgrep 'nano'

Abbiamo generato il processo nano in modo simile agli esempi precedenti. Quindi abbiamo ottenuto il suo PPID usando il comando pgrep. Una volta ottenuto questo valore, possiamo eseguire il kill job di Linux molto facilmente.

Metodo 4:utilizzo del comando pidof

Il comando pidof è un altro modo semplice ma utile per determinare il PPID di un processo Linux. Visualizza sia il PPID che tutti gli altri PID associati a un processo. Dai un'occhiata all'esame di seguito per vedere come utilizzarlo nella pratica.

$ nano > /dev/null &
$ pidof nano
$ pidof -s nano

Quando usi il comando pidof per controllare i processi in esecuzione in Linux, vedrai spesso più PID. Di solito, in questi casi, il primo o l'ultimo numero è il PPID, a seconda che siano in ordine ascendente o discendente. Puoi usare i -s opzione di pidof per mitigare questo. Verrà visualizzato solo il valore PPID.

Metodo 5:utilizzo del comando in alto

Il comando top fornisce una vista in tempo reale di tutti i processi in esecuzione nei sistemi operativi simili a Unix. Puoi usarlo per visualizzare l'elenco delle attività Linux nel tuo terminale e scoprire le informazioni PID di un processo specifico.

$ top

Utilizzare i seguenti comandi per recuperare il PPID di un particolare processo dall'output del comando principale.

$ nano > /dev/null &
$ top -n1 -b | grep 'nano'
$ top -n1 -b | awk '/nano/ {print $1}'

Poiché top fornisce un output in tempo reale invece di scaricare dati statici sul terminale, abbiamo utilizzato -n1 e -b opzione per stampare l'output statico. Quindi puoi recuperare le informazioni PPID utilizzando il comando grep o il comando awk in Linux.

Uccidi il processo Linux che non risponde

È possibile utilizzare uno dei metodi precedenti per recuperare il PPID del processo che non risponde. Una volta ottenuto questo, è tempo di terminare del tutto il processo. Esistono diversi comandi che ci consentono di farlo, come kill , pkill e uccidi tutti . Vedremo come funzionano uno per uno nelle sezioni seguenti.

Metodo 1:usare il comando kill

Il comando kill è ampiamente utilizzato dagli amministratori Linux grazie alla sua semplicità e alle sue azioni robuste. Prende il PID del processo e un segnale. Il kernel uccide/arresta l'esecuzione del processo in base a questo segnale. Puoi usare il comando successivo per visualizzare tutti i segnali disponibili per il comando kill.

$ kill -l

Come puoi vedere, kill offre 64 segnali diversi. Tuttavia, in questa guida ne discuteremo solo due. Questi sono il segnale 9(SIGKILL) e il segnale 15(SIGTERM). SIGTERM o segnale 15 è il metodo sicuro per uccidere un processo che non risponde. SIGKILL o segnale 9, d'altra parte, force uccide un processo Linux.

$ kill -9 8631
$ kill -KILL 8631

I comandi precedenti sono equivalenti e forzeranno l'uccisione del processo che ha il PID 8631. Questo è il PPID del processo "nano" nel mio sistema. Sostituiscilo con il PID del processo che non risponde nel tuo sistema.

$ kill -15 8631
$ kill -TERM 8631

Anche i comandi precedenti sono equivalenti e uccideranno il processo con grazia. Ecco perché può volerci del tempo prima che il processo venga interrotto. Inoltre, potrebbe essere necessario aggiungere sudo prima del comando kill se il processo è di proprietà di un altro utente.

Metodo 2:utilizzo del comando pkill

Il comando pkill è uno dei comandi di gestione dei processi più versatili in Linux. Ci consente di terminare un processo che non risponde in base al suo nome, PID, proprietario e altri attributi di runtime. È uno strumento perfetto per iniziare utenti o persone che non hanno familiarità con molti comandi standard del terminale.

$ pkill nano
$ pkill 8631
$ pkill -e nano
$ pkill -f nano

Puoi usare uno qualsiasi dei comandi pkill sopra per uccidere un processo zombi/che non risponde in Linux. Usa la -e opzione se vuoi una conferma sul kill job di Linux. Il comando pkill consente inoltre agli utenti di inviare segnali di terminazione specifici.

Metodo 3:usare il comando killall

Il comando killall consente agli utenti di terminare i processi che non rispondono in base ai loro nomi. È più facile da usare ma può creare problemi se non sei prudente. Poiché killall termina i processi in base ai nomi, c'è sempre la possibilità che tu finisca per uccidere un processo per caso. Ad esempio, se nel tuo sistema sono disponibili diverse versioni di nano, il primo esempio le ucciderà tutte.

$ killall nano
$ killall --verbose nano
$ killall --interactive nano
$ killall --signal KILL nano

Il primo esempio mostra l'utilizzo di base del comando killall in Linux. Il secondo comando riporterà se il kill job è riuscito o meno e il terzo comando chiederà conferma all'utente prima di terminare il processo. Per impostazione predefinita, killall usa il segnale SIGTERM per uccidere i processi. Tuttavia, puoi specificare il segnale manualmente, come mostrato nell'ultimo esempio.

Metodo 4:utilizzo di pratici fogli singoli

La vera bellezza di Linux sta nel fatto che consente agli utenti di creare sofisticate combinazioni di comandi in base alle loro esigenze. Per dimostrarlo, abbiamo delineato alcune battute nella sezione.

$ nano > /dev/null &
$ kill -9 $(pgrep nano)
$ ps aux | grep -e 'nano' | awk '{print $2}' | xargs kill -9

Nel primo esempio, abbiamo utilizzato l'interpolazione della shell per passare il PID del processo 'nano' al comando kill di Linux. Il secondo esempio utilizza diversi comandi terminali quotidiani e reindirizzamento I/O per interrompere il processo. Puoi curare le tue battute eleganti una volta che ti senti a tuo agio con il terminale Linux.

Metodo 5:uccidi più processi utilizzando gli script della shell di Linux

A volte gli utenti potrebbero voler terminare più di un singolo processo. Possiamo facilmente automatizzare tali attività scrivendo semplici script di shell. Se sei interessato a questo argomento, controlla la nostra precedente guida sugli script di shell Linux. Lo script seguente recupererà il PPID dei processi che desideri terminare e quindi li terminerà utilizzando segnali di uccisione.

$ nano proc-killer.sh
#!/usr/bin/env bash

for pro in "[email protected]"
do
    pid=$(pgrep $pro | head -1)
    echo $pid

    comm="kill -9 $pid"
    eval $comm
done

Ora salva questo file e aggiungi il permesso di esecuzione emettendo il comando seguente.

$ chmod +x proc-killer.sh

Ora puoi passare a questo script il nome dei processi che vuoi terminare.

$ ./proc-killer.sh nano gedit vlc

Sostituisci semplicemente gli argomenti con i nomi dei processi Linux che non rispondono nel tuo sistema.

Termina un processo che non risponde dalla GUI

Puoi anche terminare un processo che non risponde dall'interfaccia utente grafica o dalla finestra X. Discuteremo due metodi per farlo nella sezione seguente.

Metodo 1:utilizzo dell'applicazione xkill

Le moderne distribuzioni Linux utilizzano la finestra grafica X per fornire agli utenti un'esperienza grafica elegante. C'è un semplice strumento chiamato xkill che consente agli utenti di chiudere una finestra della GUI che non risponde. È possibile poiché, in Linux, la finestra del titolo di un'applicazione è separata dall'applicazione stessa.

Vai semplicemente sul tuo emulatore di terminale Linux e digita xkill. Trasformerà il cursore del mouse in un pulsante X, che può essere utilizzato per eliminare qualsiasi finestra della GUI.

$ xkill

Ora, tutto ciò che devi fare è semplicemente fare clic sulla barra della finestra dell'applicazione che non risponde e verrà interrotta e scomparirà all'istante.

Metodo 2:utilizzo dell'applicazione System Monitor su Ubuntu

La maggior parte delle distribuzioni Linux tradizionali viene fornita con una sorta di strumenti di monitoraggio della GUI che consentono agli utenti di terminare graficamente un processo Linux sospeso. Ad esempio, l'applicazione System Monitor su Ubuntu ci consentirà di terminare un processo che non risponde in modo intuitivo. Puoi semplicemente selezionare il processo morto dall'elenco dei processi e terminarlo facendo clic con il pulsante destro del mouse sul processo e selezionando l'opzione di eliminazione.

Ci sono molte altre alternative a questa applicazione e siamo sicuri che potrai trovarne facilmente una per la tua distribuzione o ambiente desktop.

Pensieri finali

Poiché la gestione dei processi in Linux è molto versatile, gli utenti spesso si sentono frustrati quando hanno a che fare con processi che non rispondono. Ecco perché i nostri editori hanno delineato tutti i modi possibili per terminare un processo Linux morto in questa guida. Dopo aver letto questo, dovresti essere in grado di uccidere tutti i processi che non rispondono dalla riga di comando o dalla GUI. Puoi anche utilizzare uno qualsiasi dei nostri comandi one-liner per affrontare tali fastidi nel più breve tempo possibile. Inoltre, puoi persino uccidere più di un singolo processo utilizzando il nostro semplice script di shell. Quindi si spera che tu abbia ottenuto le informazioni che cercavi dalla nostra guida.


Linux
  1. Come uccidere un processo zombie su Linux

  2. Come trovare e uccidere il processo Zombie in Linux

  3. Come eliminare il processo più grande in un sistema Linux che non risponde

  4. Come uccidere un processo in esecuzione su una particolare porta in Linux?

  5. Come mettere in pausa/riprendere un processo in Linux

Come uccidere i processi Zombie in Linux

Come modificare la priorità di un processo in Linux

Come eliminare l'esecuzione del processo Linux su una porta particolare

Come KILL un processo su Linux

Come inviare processi in background su Linux

Come eseguire il downgrade dei pacchetti su un sistema Linux:la guida definitiva