Ricerca nel sito web

Tutto quello che devi sapere sui processi in Linux [Guida completa]


In questo articolo, esamineremo una comprensione di base dei processi e vedremo brevemente come gestire i processi in Linux utilizzando determinati comandi.

Un processo si riferisce ad un programma in esecuzione; è un'istanza in esecuzione di un programma. È costituito dalle istruzioni del programma, dai dati letti da file, da altri programmi o dall'input di un utente del sistema.

Tipi di processi

Esistono fondamentalmente due tipi di processi in Linux:

  • Processi in primo piano (noti anche come processi interattivi): questi vengono inizializzati e controllati tramite una sessione terminale. In altre parole, deve esserci un utente connesso al sistema per avviare tali processi; non si sono avviati automaticamente come parte delle funzioni/servizi del sistema.
  • Processi in background (noti anche come processi non interattivi/automatici): sono processi non collegati a un terminale; non si aspettano alcun input da parte dell'utente.

Cos'è Demoni

Si tratta di tipi speciali di processi in background che iniziano all'avvio del sistema e continuano a funzionare per sempre come servizio; non muoiono. Vengono avviati come attività di sistema (eseguiti come servizi), spontaneamente. Tuttavia, possono essere controllati da un utente tramite il processo init.

Creazione di un processo in Linux

Un nuovo processo viene normalmente creato quando un processo esistente crea una copia esatta di se stesso in memoria. Il processo figlio avrà lo stesso ambiente del suo genitore, ma solo il numero ID del processo è diverso.

Esistono due modi convenzionali utilizzati per creare un nuovo processo in Linux:

  • Utilizzo della funzione System(): questo metodo è relativamente semplice, tuttavia è inefficiente e presenta rischi significativi per la sicurezza.
  • Utilizzo della funzione fork() e exec(): questa tecnica è un po' avanzata ma offre maggiore flessibilità, velocità e sicurezza.

Come fa Linux a identificare i processi?

Poiché Linux è un sistema multiutente, il che significa che diversi utenti possono eseguire vari programmi sul sistema, ciascuna istanza in esecuzione di un programma deve essere identificata in modo univoco dal kernel.

Inoltre, un programma viene identificato dal suo ID di processo (PID) e dall'ID di processo principale (PPID), pertanto i processi possono essere ulteriormente classificati in:

  • Processi principali: si tratta di processi che creano altri processi durante l'esecuzione.
  • Processi secondari: questi processi vengono creati da altri processi durante l'esecuzione.

Il processo di inizializzazione

Il processo Init è la madre (genitore) di tutti i processi sul sistema, è il primo programma che viene eseguito all'avvio del sistema Linux; gestisce tutti gli altri processi sul sistema. Viene avviato dal kernel stesso, quindi in linea di principio non ha un processo genitore.

Il processo di inizializzazione ha sempre l'ID processo 1. Funziona come un genitore adottivo per tutti i processi orfani.

Puoi utilizzare il comando pidof per trovare l'ID di un processo:

pidof systemd
pidof top
pidof httpd

Per trovare l'ID del processo e l'ID del processo principale della shell corrente, esegui:

echo $$
echo $PPID

Avvio di un processo in Linux

Una volta eseguito un comando o un programma (ad esempio cloudcmd – CloudCommander), verrà avviato un processo nel sistema. È possibile avviare un processo in primo piano (interattivo) come segue, sarà connesso al terminale e un utente potrà inviarlo in input:

cloudcmd

Lavori in background Linux

Per avviare un processo in background (non interattivo), utilizza il simbolo &, qui il processo non legge l'input di un utente finché non viene spostato in primo piano.

cloudcmd &
jobs

Puoi anche mandare un processo in background sospendendolo usando [Ctrl + Z], questo invierà il segnale SIGSTOP al processo, interrompendo così le sue operazioni; diventa inattivo:

tar -cf backup.tar /backups/*  #press Ctrl+Z
jobs

Per continuare a eseguire in background il comando sospeso sopra, utilizza il comando bg:

bg

Per inviare un processo in background in primo piano, utilizza il comando fg insieme all'ID lavoro in questo modo:

jobs
fg %1

Potrebbe piacerti anche: Come avviare il comando Linux in background e scollegare il processo nel terminale

Stati di un processo in Linux

Durante l'esecuzione, un processo cambia da uno stato all'altro a seconda del suo ambiente/circostanze. In Linux, un processo ha i seguenti stati possibili:

  • In esecuzione: qui è in esecuzione (è il processo corrente nel sistema) o è pronto per essere eseguito (è in attesa di essere assegnato a una delle CPU).
  • In attesa: in questo stato, un processo è in attesa che si verifichi un evento o una risorsa di sistema. Inoltre, il kernel distingue anche tra due tipi di processi di attesa; i processi di attesa interrompibili – possono essere interrotti da segnali e i processi di attesa non interrompibili – attendono direttamente dalle condizioni dell'hardware e non possono essere interrotti da alcun evento/segnale.
  • Interrotto: in questo stato, un processo è stato interrotto, solitamente tramite la ricezione di un segnale. Ad esempio, un processo di cui è in corso il debug.
  • Zombie – qui un processo è morto, è stato interrotto ma ha ancora una voce nella tabella dei processi.

Come visualizzare i processi attivi in Linux

Esistono diversi strumenti Linux per visualizzare/elencare i processi in esecuzione sul sistema, i due tradizionali e ben noti sono i comandi ps e top:

1. Comando ps

Visualizza informazioni su una selezione dei processi attivi sul sistema come mostrato di seguito:

ps 
ps -e | head 

2. in alto – Strumento di monitoraggio del sistema

top è un potente strumento che ti offre una vista dinamica in tempo reale di un sistema in esecuzione, come mostrato nello screenshot qui sotto:

top 

Leggi questo per ulteriori esempi di utilizzo principali: 12 esempi di comandi TOP in Linux

3. sguardi: strumento di monitoraggio del sistema

glance è uno strumento di monitoraggio del sistema relativamente nuovo con funzionalità avanzate:

glances

Per una guida completa all'utilizzo, leggi: Glances: uno strumento avanzato di monitoraggio del sistema in tempo reale per Linux

Esistono molti altri utili strumenti di monitoraggio del sistema Linux che puoi utilizzare per elencare i processi attivi, apri il collegamento seguente per saperne di più:

  1. 20 strumenti da riga di comando per monitorare le prestazioni di Linux
  2. 13 strumenti di monitoraggio Linux più utili

Come controllare i processi in Linux

Linux ha anche alcuni comandi per il controllo dei processi come kill, pkill, pgrep e killall, di seguito sono riportati alcuni esempi di base di come utilizzarli:

pgrep -u tecmint top
kill 2308
pgrep -u tecmint top
pgrep -u tecmint glances
pkill glances
pgrep -u tecmint glances

Per sapere come utilizzare questi comandi in modo approfondito, per uccidere/terminare i processi attivi in Linux, apri i collegamenti seguenti:

  1. Una guida ai comandi Kill, Pkill e Killall per terminare il processo Linux
  2. Come trovare e uccidere i processi in esecuzione in Linux

Tieni presente che puoi usarli per terminare le applicazioni che non rispondono in Linux quando il tuo sistema si blocca.

Invio di segnali ai processi

Il modo fondamentale per controllare i processi in Linux è inviare loro segnali. Esistono più segnali che è possibile inviare a un processo per visualizzare tutti i segnali eseguiti:

kill -l

Per inviare un segnale a un processo, usa i comandi kill, pkill o pgrep di cui abbiamo parlato prima. Ma i programmi possono rispondere ai segnali solo se sono programmati per riconoscerli.

E la maggior parte dei segnali sono per uso interno da parte del sistema o per i programmatori quando scrivono il codice. Di seguito sono riportati i segnali utili all'utente del sistema:

  • SIGHUP 1: inviato a un processo quando il suo terminale di controllo è chiuso.
  • SIGINT 2: inviato a un processo dal suo terminale di controllo quando un utente interrompe il processo premendo [Ctrl+C].
  • SIGQUIT 3: inviato a un processo se l'utente invia un segnale di uscita [Ctrl+D].
  • SIGKILL 9 – questo segnale termina (uccide) immediatamente un processo e il processo non eseguirà alcuna operazione di pulizia.
  • SIGTERM 15 – questo è un segnale di terminazione del programma (kill lo invierà per impostazione predefinita).
  • SIGTSTP 20 – inviato a un processo dal suo terminale di controllo per richiederne l'arresto (terminal stop); avviato dall'utente premendo [Ctrl+Z].

Di seguito sono riportati esempi di comandi kill per terminare l'applicazione Firefox utilizzando il suo PID una volta bloccata:

pidof firefox
kill 9 2687
OR
kill -KILL 2687
OR
kill -SIGKILL 2687  

Per terminare un'applicazione utilizzando il suo nome, usa pkill o killall in questo modo:

pkill firefox
killall firefox 

Modifica della priorità del processo Linux

Nel sistema Linux, tutti i processi attivi hanno una priorità e un certo valore gradevole. I processi con priorità più alta normalmente otterranno più tempo CPU rispetto ai processi con priorità più bassa.

Un utente del sistema con privilegi root può tuttavia influenzare questo con i comandi nice e renice.

Dall'output del comando top, NI mostra il valore nice del processo:

top  

Utilizza il comando nice per impostare un valore gradevole per un processo. Tieni presente che gli utenti normali possono attribuire un bel valore compreso tra zero e 20 ai processi di loro proprietà.
Solo l'utente root può utilizzare valori nice negativi.

Per renice la priorità di un processo, utilizzare il comando renice come segue:

renice +8  2687
renice +8  2103

Dai un'occhiata ai nostri articoli utili su come gestire e controllare i processi Linux.

  1. Gestione dei processi Linux: avvio, spegnimento e tutto il resto
  2. Trova i 15 principali processi in base all'utilizzo della memoria con "top" in modalità batch
  3. Trova i principali processi in esecuzione in base al maggiore utilizzo di memoria e CPU in Linux
  4. Come trovare un nome di processo utilizzando il numero PID in Linux

È tutto per ora! Hai domande o idee aggiuntive, condividile con noi tramite il modulo di feedback qui sotto.