Guida alla comprensione della gestione dei processi Linux con 'ps' e 'kill'
Impara come ispezionare i processi Linux con `ps`, leggere le colonne chiave e fermare i processi in modo sicuro con `kill`, `pkill` e `killall`.
Guida alla Gestione dei Processi Linux con 'ps' e 'kill'
Gestire i processi Linux è un'abilità quotidiana di risoluzione dei problemi. Quando un'applicazione si blocca, un job di backup consuma CPU o un demone necessita di un riavvio pulito, ps ti aiuta a trovare il processo e kill ti permette di inviargli il segnale giusto.
Ogni programma in esecuzione ha un ID di processo, o PID. Una volta che conosci quel PID, puoi ispezionare la proprietà, i processi genitori, l'uso di CPU e memoria, e decidere se chiedere al processo di fermarsi in modo pulito o forzarlo come ultima risorsa.
Il Modello dei Processi Linux: PID e Stati
In Linux, ogni programma, servizio o attività in esecuzione viene trattato come un processo. Ogni processo è identificato in modo univoco da un ID di Processo (PID), un intero positivo assegnato dal kernel al momento della creazione. Questo PID è il modo principale con cui gli strumenti di sistema fanno riferimento e manipolano un processo specifico.
I processi attraversano stati come in esecuzione, in attesa, fermo e zombie. Un processo in attesa di solito sta aspettando I/O o un altro evento. Uno zombie è già uscito, ma il suo processo genitore non ha ancora raccolto il suo stato di uscita.
Visualizzare i Processi con il Comando ps
Il comando ps (stato del processo) viene utilizzato per visualizzare informazioni sui processi attualmente in esecuzione. Poiché l'output può essere travolgente, vengono utilizzate diverse opzioni per selezionare quali processi visualizzare e quali colonne di informazioni includere.
Sintassi e Flag Essenziali di ps
Esistono due stili principali per i flag di ps: stile Unix (prefissato con -) e stile BSD (senza prefisso). La pratica moderna spesso favorisce la combinazione di flag in stile Unix per viste complete.
1. Visualizzare Tutti i Processi (Stile BSD)
Il comando più comune per una panoramica del sistema è ps aux.
a: Mostra i processi per tutti gli utenti.u: Visualizza i processi in un formato orientato all'utente (mostrando utente, uso CPU, uso memoria, ecc.).x: Include i processi che non hanno un terminale di controllo (come i demoni in background).
ps aux
2. Visualizzare i Processi in un Formato Standard (Stile UNIX)
Il comando ps -ef fornisce un elenco completo in formato POSIX.
-e: Seleziona tutti i processi.-f: Visualizza l'elenco in formato completo, includendo PPID e argomenti del comando.
ps -ef
Interpretare le Colonne Chiave dell'Output
Indipendentemente dai flag utilizzati, alcune colonne sono critiche per la gestione dei processi:
| Colonna | Descrizione |
|---|---|
| PID | ID del processo (l'identificatore univoco) |
| PPID | ID del processo genitore (il PID del processo che ha avviato questo) |
| USER | L'utente che possiede il processo |
| %CPU | Percentuale di tempo CPU utilizzato |
| %MEM | Percentuale di memoria fisica utilizzata |
| VSZ | Dimensione della memoria virtuale (in KiB) |
| RSS | Dimensione del set residente (memoria fisica utilizzata, in KiB) |
| STAT | Stato corrente del processo (es. R=In esecuzione, S=In attesa, Z=Zombie) |
| COMMAND | Il comando che ha avviato il processo |
Filtrare i Processi con grep
Per trovare un processo specifico, puoi reindirizzare l'output di ps a grep.
Ad esempio, questo cerca i processi Apache httpd:
ps aux | grep httpd
Suggerimento:
ps | grepmostra spesso il processogrepstesso. La notazione tra parentesi evita quella corrispondenza extra:ps aux | grep '[h]ttpd'
Gestire i Processi con il Comando kill
Il comando kill non solo ferma i processi; invia loro segnali. Il comportamento predefinito è richiedere una terminazione graduale, ma altri segnali possono istruire un processo a rileggere i file di configurazione, interrompere temporaneamente l'esecuzione o forzare un'uscita immediata.
Capire i Segnali
I segnali sono codici numerici o mnemonici standardizzati. Puoi elencare i segnali disponibili usando kill -l.
| Nome Segnale | Numero Segnale | Descrizione |
|---|---|---|
| SIGTERM | 15 | Il segnale di terminazione predefinito. Chiede al processo di spegnersi in modo graduale. |
| SIGKILL | 9 | Il segnale di terminazione immediato e forzato. Il processo non può ignorarlo. |
| SIGHUP | 1 | Segnale di riaggancio, spesso usato dai demoni per rileggere i file di configurazione. |
| SIGSTOP | Di solito 19 su Linux x86 | Ferma (mette in pausa) un processo senza terminarlo. |
| SIGCONT | Di solito 18 su Linux x86 | Riprende un processo fermato. |
Inviare Segnali con kill
La sintassi di base per il comando kill è:
kill -SEGNALE PID
1. Terminazione Graduale (La Migliore Pratica)
Prova prima SIGTERM. Dà all'applicazione la possibilità di salvare lo stato, chiudere i file, completare le richieste e rilasciare i blocchi.
kill 12345 # Predefinito a SIGTERM (15)
# OPPURE
kill -15 12345
2. Terminazione Forzata (Ultima Risorsa)
Se un processo non risponde e ignora SIGTERM, usa SIGKILL (segnale 9). Questo ferma il processo senza pulizia a livello di applicazione. Ciò può lasciare scritture parziali, file di blocco abbandonati o transazioni interrotte a seconda di cosa stava facendo il processo.
kill -9 12345
Gestire i Processi per Nome: pkill e killall
Mentre ps e kill si basano sui PID, a volte è più veloce individuare i processi per nome. Usa questi comandi con estrema cautela, poiché possono influenzare più processi contemporaneamente.
killall
Termina tutti i processi che corrispondono al nome esatto del processo fornito.
killall httpd # Invia SIGTERM a tutti i processi chiamati 'httpd'
killall -9 cron # Uccide forzatamente tutti i processi 'cron'
pkill
Permette la corrispondenza di pattern (regex) durante la selezione dei processi a cui inviare segnali, offrendo maggiore flessibilità rispetto a killall.
# Uccide qualsiasi processo la cui riga di comando completa contiene 'firefox'
pkill -f firefox
Attenzione su
killallepkill: Se accidentalmente prendi di mira un processo critico di sistema (comeinitosystemd), puoi destabilizzare o bloccare l'intero sistema operativo. Verifica sempre il PID di destinazione usandopsprima di usarekillallopkillcon pattern ampi.
Un Flusso di Lavoro Sicuro per la Gestione dei Processi
Quando risolvi un problema di un'applicazione in fuga, segui questo approccio sistematico:
- Identifica: Usa
ps aux | grep <nome_processo>per trovare il PID del processo e verificarne lo stato. - Controlla lo Stato: Esamina la colonna
STAT. Se èZ, il processo è già morto; hai bisogno del processo genitore per raccoglierlo. Controlla ilPPIDprima di uccidere qualsiasi cosa. - Tenta un Arresto Graduale: Invia
SIGTERM(kill PIDpredefinito). Aspetta qualche secondo. - Verifica l'Arresto: Esegui
psdi nuovo. - Forza l'Arresto se Necessario: Se il processo persiste e capisci il rischio, invia
SIGKILLconkill -9 PID.
L'abitudine pratica è semplice: identifica il PID, controlla il proprietario e lo stato, invia il segnale utile più gentile, quindi verifica il risultato. Questo mantiene la pulizia dei processi prevedibile e riduce la possibilità di fermare il carico di lavoro sbagliato.