Torna al blog

Gestire i processi in Linux - una guida sull'uso di ps, kill e nice

Gestire i processi in Linux - una guida sull'uso di ps, kill e nice

Introduzione

Quando la maggior parte di noi usa i computer, eseguiamo varie applicazioni. Queste applicazioni sono eseguite da programmi chiamati server o sistemi operativi. Esistono molti tipi diversi di server che funzionano in modi diversi. Uno di questi è Linux. Linux esegue le applicazioni sotto forma di processi.

In Linux, ci riferiamo a ciascuna applicazione come a un 'processo'. Il server è in grado di gestire l'aspetto di basso livello del ciclo di vita del processo. Come utente, potresti dover interagire con il server per manipolare alcuni aspetti di livello superiore. Puoi comunicare con il sistema operativo e gestirlo utilizzando vari strumenti. Esistono molti comandi che puoi utilizzare per modificare vari aspetti e funzioni del server. Ecco un tutorial facile da seguire su come configurare facilmente il tuo server basato su Linux su Ubuntu. Puoi inoltre imparare come installare lo Stack LAMP (Linux, Apache, MySQL, PHP).

Questa guida si concentra su come utilizzare ps, kill e nice per gestire i processi in Linux.

Visualizzare i processi in esecuzione in Linux

  • top

Per cominciare, uno dei comandi più basilari che dovresti conoscere è top. Questo strumento ti aiuta a visualizzare quali processi sono attualmente in esecuzione sul sistema. Ecco come apparirà quando lo esegui:

top command output

 

Nella parte superiore del risultato, puoi trovare le statistiche di sistema. Questo ti fornisce informazioni su elementi come il carico di sistema e il numero di attività. In questo esempio, puoi determinare che c'è un processo in esecuzione e 55 processi inattivi. I processi inattivi o in sospensione sono quelli che non stai utilizzando attualmente. Ciò significa che non stanno occupando le risorse di sistema. Infine, puoi vedere tutti i processi in esecuzione nella parte inferiore del pop-up con le statistiche di utilizzo.

  • htop

Prima di utilizzare questo comando, dovrai installarlo dai repository digitando ed eseguendo quanto segue:

Una volta ottenuto, puoi usarlo per visualizzare informazioni simili a quelle ottenute con top. La differenza principale è che con il comando htop si ottiene un risultato più intuitivo:

htop command output

Come puoi vedere, questo risultato è facile da seguire e interpretare.

Utilizzare ps per elencare i processi

Sebbene sia possibile utilizzare i comandi sopra menzionati per visualizzare i processi in esecuzione, potrebbero non coprire sempre tutti gli scenari. Fortunatamente, abbiamo a disposizione uno strumento più potente e flessibile. Si tratta del comando ps.

Esploriamo cosa vedrai se esegui il comando così com'è:

ps command output

In questo output, puoi vedere tutti i processi in esecuzione in relazione all'utente e alla sessione correnti. Tuttavia, questo non fornisce molte informazioni.

Se desideri una visione più olistica di tutti i processi in esecuzione sul sistema, devi utilizzare un argomento. Un argomento ti consente di vedere tutti i processi posseduti da tutti gli utenti, indipendentemente dall'associazione del terminale. L'output appare anche in un formato molto intuitivo e facile da leggere. Ecco un esempio:

ps aux

D'altra parte, puoi anche visualizzare queste informazioni in un formato ad albero. Qui, come vedrai, diventano evidenti anche le relazioni gerarchiche:

output in tree format

In questo esempio, puoi vedere come kthreadd viene visualizzato come genitore dei processi che seguono successivamente.

  • Cosa sono gli ID di processo?

Come utente Linux o Unix, dovresti conoscere gli ID di processo. Conosciuti anche come PID, sono identità univoche assegnate a ciascun processo dal sistema. Queste identità consentono al server di tenere traccia di ogni singolo processo. Per conoscere il PID di un determinato processo, devi utilizzare il comando pgrep, in questo modo:

Quando avvii il sistema, inizia a essere eseguito il primo processo. Questo processo si chiama init. Come meccanismo predefinito, al processo init viene assegnato il PID '1'. Puoi verificare il PID di questo processo come segue:

Il processo init ha quindi la responsabilità di avviare tutti gli altri programmi o processi. Comprensibilmente, i processi successivi avranno PID crescenti o più grandi.

  • Cosa sono i processi genitori?

Un altro concetto da conoscere è il processo padre. Se il processo A genera il processo B, allora il processo A è il processo padre del processo B. Per aiutare a distinguerli, il sistema assegna ai processi padre un PPID. Puoi notare questo PPID nelle intestazioni delle colonne ogni volta che esegui un comando di gestione come top, htop e ps.

  • Cosa sono le relazioni padre-figlio?

Come già sappiamo, i processi padre generano processi figlio. Questa creazione avviene in due passaggi. Il primo è fork(). Questo inizia creando un nuovo spazio di indirizzamento. Copia anche le risorse del padre utilizzando il copy-on-write in modo che siano disponibili anche sul processo figlio. Il secondo è exec(). Questo è responsabile del caricamento e dell'esecuzione di un eseguibile nello spazio di indirizzamento appena creato.

  • Cosa succede se il processo figlio muore prima del processo padre?

Nel caso in cui ciò accada, il processo figlio diventa uno zombie. Questo finché il processo padre non raccoglie alcune informazioni su di esso o comunica al kernel che non ha bisogno delle informazioni associate. Una volta accaduto questo, le risorse che il processo stava utilizzando saranno libere.

  • Cosa succede se il processo padre muore prima del processo figlio?

In questo scenario, il sistema riassegnerà il processo figlio a un altro processo padre. Potrebbe essere init o qualsiasi altro processo.

Inviare segnali ai processi in Linux

Puoi fare in modo che un determinato processo ti risponda inviando un segnale. I segnali ti aiutano a comunicare con il sistema operativo. Puoi usare il segnale per far terminare, avviare o modificare un determinato comportamento o compito di un'applicazione.

  • Usare il PID per inviare segnali

Una delle utilità che puoi usare per inviare segnali in Linux è kill. Questo comando, come suggerisce il nome, ti aiuta a terminare o uccidere un processo:

Questa utilità invia il segnale TERM al processo, indicandogli di terminare il processo. Il comando fa sì che l'applicazione esegua la pulizia ed esca facilmente. Nel caso in cui il programma non esca correttamente alla ricezione del segnale TERM, puoi procedere direttamente bypassando con il segnale KILL:

Questo segnale non va al programma. Va al kernel del sistema operativo. Il kernel spegnerà direttamente il processo. Puoi usarlo quando un programma ignora i segnali che gli stai inviando.

In questo comando, puoi anche sostituire il nome del segnale con il numero ad esso associato. Ad esempio, puoi usare '-15' al posto di '-TERM'. Allo stesso modo, puoi sostituire '-KILL' con '-9'.

  • Usare i segnali per vari scopi

Puoi usare i segnali per fare altre cose oltre a uccidere o terminare i programmi. Ad esempio, un problema che potresti riscontrare è la gestione del riavvio dei daemon. Ogni volta che un daemon riceve un segnale di riaggancio o HUP, si riavvierà in programmi come Apache. Per aggirare questo problema, puoi usare il seguente segnale:

Questo comando farà ricaricare ad Apache la sua configurazione. Di conseguenza, continuerà a servirti i contenuti pertinenti.

Se vuoi vedere quali segnali puoi inviare con l'utilità kill, usa il seguente comando:

list of signals

  • Inviare segnali per nome

Tradizionalmente, invieresti un segnale usando il PID del programma. Tuttavia, hai la possibilità di inviare segnali usando il nome normale del processo. Per fare ciò, puoi usare il comando pkill. Funziona in modo simile a come funziona il comando pkill. L'unica differenza è che ti consente di usare il nome del processo:

Questo comando pkill è l'equivalente del seguente comando kill:

Hai anche un comando per quando vuoi inviare un segnale a ogni istanza invece che a un processo particolare. Il seguente comando invierà un segnale TERM a tutte le istanze di Firefox in esecuzione sul sistema:

Regolare le priorità dei processi

Un'altra cosa che puoi fare con i comandi Linux è regolare le priorità. Questo significa che puoi decidere quale processo ha la priorità nel tuo ambiente server. Potrebbero esserci alcuni processi che consideri critici. Altri potrebbero non essere così necessari. Il sistema eseguirà questi ultimi programmi solo quando rimangono delle risorse libere.

Puoi controllare la priorità dei processi in Linux tramite il comando niceness. Questo valore indica le attività ad alta priorità come meno nice e i processi a bassa priorità come più nice. Pensala in questo modo: i processi ad alta priorità sono meno nice perché stanno monopolizzando le risorse. Le attività a bassa priorità le stanno condividendo, quindi sono più nice.

Puoi vedere il valore nice di un determinato processo quando esegui il comando top. Questo valore si trova nella colonna 'NI'. Le attività ad alta priorità avranno valori nice compresi tra '-19/-20'. I processi a bassa priorità variano tra '19/20'. Vedrai qualcosa di simile a questo:

Se vuoi eseguire un processo con un valore nice assegnato personalmente, devi semplicemente usare il comando nice:

Questo comando funzionerà solo quando avvii il programma in questione. Se vuoi cambiare il valore nice di un programma già in esecuzione, devi usare renice:

Conclusione

Come puoi vedere, gli strumenti qui sono piuttosto diversi da quelli grafici. Di conseguenza, possono essere difficili da capire per un principiante. Questa guida ti aiuterà a familiarizzare con i comandi. Una maggiore pratica ti aiuterà a imparare meglio e a usarli in modo più efficiente.

Dai un'occhiata alle nostre altre risorse che possono aiutarti a gestire meglio i tuoi server Linux, inclusi i tutorial su come configurare il tuo server Linux per utilizzare l'autenticazione basata su chiavi SSH, localizzare i file sul tuo sistema VPS Linux con whereis, which, whatis, readlink e find, e leggere e impostare le variabili d'ambiente e di shell su un VPS Linux.

Buon computing!

author

Akshay Nagpal

Autore · CloudSigma

Preslav Dobrev è un designer creativo presso CloudSigma, con un focus su un'identità aziendale coerente attraverso l'uso di canali di marketing tradizionali e innovativi. È abile nel fondere la visione artistica con il marketing strategico per creare narrazioni di brand di grande impatto.

Commenti

Ancora nessun commento. Scrivi il primo.