La gestione dei processi in Linux può sembrare inizialmente scoraggiante per un nuovo amministratore di sistema (amministratore di sistema). Ma con una piccola spiegazione e dimostrazione, imparerai come trovare ed eseguire processi di uccisione di Linux è solo questione di usare strumenti da riga di comando come ps
e kill
.
In questo articolo imparerai i comandi per individuare processi in esecuzione ed errati, uccidere (terminare) processi in esecuzione, trovare processi in background e molto altro su qualsiasi sistema operativo Linux.
Entro la fine dell'articolo, gestirai i processi basati sui numeri di identificazione del processo (PID) dalla riga di comando come un professionista Linux. Continua a leggere per scoprire tutto sui comandi di gestione dei processi in Linux!
Prerequisiti
Questo articolo sarà una guida dettagliata su come gestire i processi in Linux. Se vuoi essere pratico, avrai bisogno di quanto segue:
- Un host Linux, che può essere una macchina virtuale o una macchina fisica.
- Per provare gli esempi di PowerShell, installa PowerShell 7.1.1 su un host Linux.
- Un account utente non root. Sebbene l'accesso come root non sia richiesto, ci sarà un esempio in cui l'utente root può terminare il processo in esecuzione di un altro utente.
La distribuzione di Linux, che scegli di utilizzare, dipende da te. Questo articolo sarà basato su Ubuntu 20.04 LTS. Tuttavia, i comandi sono standard per il sistema operativo Linux.
Pronto per iniziare? Bene, tuffiamoci.
Gestione dei processi in Linux
A volte, potresti imbatterti in uno scenario in cui è necessario interrompere un processo in esecuzione su un sistema Linux. Ad esempio, potresti avere uno script bash che viene eseguito in base a una pianificazione. Quello script bash è configurato per essere eseguito come un altro utente tramite un cron job (programmatore di processi Linux).
A volte, questo script genera processi errati che possono far fallire lo script. Come si eliminano quei processi errati senza riavviare il sistema o arrestare lo script?
Nelle sezioni successive, analizzerai i comandi utilizzati per individuare e terminare o uccidere processi su un sistema Linux. Ogni sezione si baserà sull'ultima. Imparerai a conoscere ps
, top
, pgrep
, kill
e pkill
comandi tutti nativi per Linux.
Come bonus, comandi equivalenti a PowerShell Get-Process
e Stop-Process
sono inclusi se i comandi nativi di Linux non sono nel tuo stile.
Strumenti per la localizzazione dei processi
Prima di terminare un processo è necessario individuare il processo corretto da prendere di mira. Il PID univoco consente un targeting preciso. Continua a leggere per scoprire come individuare i processi corretti per la terminazione.
Utilizzo di ps
Comando per visualizzare le informazioni sul processo
Lo Stato del processo o ps
comando visualizza le informazioni relative ai processi attivi su un sistema Linux. Puoi individuare un processo in esecuzione e persino processi in background con ps
.
Il comando ps
per impostazione predefinita, visualizzerà tutti i processi per l'identificazione effettiva dell'utente (EUID) dell'utente corrente. Esecuzione di ps
comando, come mostrato di seguito, restituirà ogni processo in esecuzione che l'utente può terminare.
ps

Trovare informazioni di processo espanse utilizzando il top
Comando
E se desideri trovare informazioni costantemente aggiornate sui processi in esecuzione e sulle metriche di sistema, in tal caso, puoi utilizzare il top
comando. A differenza di ps
, il top
il comando aggiorna le informazioni sul processo sullo schermo in un intervallo prestabilito.
Quando esegui top
comando, vedrai più di un semplice PID. I dettagli del processo includono le percentuali di CPU e memoria, Bei valori (priorità del processo di pianificazione della CPU) e la priorità del processo (PR) impostata dal kernel Linux.
Per un amministratore di sistema nuovo o esperto, top
Il comando è spesso lo strumento principale per la gestione delle risorse e dei processi vitali del sistema. Come mostrato di seguito, il top
l'output del comando mostra più informazioni sul processo rispetto a ps
comando che include le metriche generali del sistema.

htop
è una variante migliorata di top
che include vari miglioramenti, come un output di terminale colorato.
Diciamo che desideri ispezionare la memoria o le risorse della CPU che un processo sta consumando. In tal caso, puoi utilizzare il p
passaggio di top
come mostrato di seguito.
top -p 2113

Forse è necessario visualizzare tutti i processi in esecuzione per un nome utente specifico. Il top
comando offre il u
passare per visualizzare solo i processi di un utente specifico. Come mostrato nell'esempio seguente, i PID corrispondono solo all'ID utente bkindle
vengono visualizzati.
top -u bkindle

Individuazione di PID di processo specifici con pgrep
Comando
Originariamente un comando Solaris, pgrep
è stato portato per l'uso con Linux. Combinando la potenza di ricerca del grep
comando e la gestione del processo di ps
, pgrep
offre flessibilità nel trovare il processo esatto a cui mirare.
Sebbene ps
visualizza ulteriori informazioni, pgrep
è progettato per restituire solo il PID dei processi restituiti. pgrep
aiuta a localizzare il processo utilizzando i molti parametri di ricerca disponibili . Nell'esempio seguente, pgrep
viene mostrato cercando qualsiasi processo che corrisponda a vmtoolsd
.
pgrep vmtoolsd

Allo stesso modo, specifica un ID utente con il u
passare per recuperare solo i processi associati a quell'utente specifico. Come mostrato di seguito, viene restituito un solo PID per l'utente bkindle
e il vmtoolsd
processo.
pgrep -u bkindle vmtoolsd

Trovare processi con Get-Process
di PowerShell in Linux
I tipici comandi Linux funzionano alla grande, ma sapevi che PowerShell è in grado di gestire anche i processi Linux? Il Get-Process
cmdlet funziona in modo simile a Linux ps
comando e restituisce le informazioni sul processo. Ad esempio, forse devi trovare tutti i processi in esecuzione dall'utente corrente, bkindle
. Come mostrato di seguito, trova tutti i PID (etichettati con ID da Get-Process
) dell'utente bkindle
.
Get-Process -IncludeUserName |
Where-Object {$_.UserName -eq 'bkindle'} |
Select-Object -Property 'Id','UserName','ProcessName'

Correlati:come utilizzare PowerShell Where-Object per filtrare tutte le cose
Dopo aver imparato a localizzare diversi processi, continua a leggere per scoprire tutti i modi per terminare o uccidere un processo in Linux!
Processi di uccisione utilizzando i comandi di uccisione in Linux
Nelle sezioni precedenti, hai appreso come individuare il PID del processo a cui desideri inviare un segnale di kill utilizzando i comandi nativi di Linux e PowerShell. Le prossime sezioni spiegheranno come usare il kill
e pkill
programmi, i segnali associati e le opzioni della riga di comando.
Segnali Linux e gestione dei processi
I segnali sono il metodo utilizzato da Linux per comunicare con i processi in esecuzione nel sistema operativo. I tre segnali primari che il kill
i comandi utilizzati per terminare i processi sono:
- 1 (SIGHUP) – Termina i programmi interattivi e fa sì che i demoni (servizi in background) rileggano i file di configurazione utilizzati dal processo.
- 9 (SIGKILL) – Forza l'uscita del processo senza eseguire attività di arresto regolari.
- 15 (SIGTERM) – Consente la chiusura regolare di un processo, ad esempio la chiusura di file aperti al termine. Questo è il segnale predefinito utilizzato quando non viene specificato alcun numero quando si utilizza il comando kill.
Sebbene questo articolo si concentri solo sui tre segnali principali utilizzati per i processi di uccisione, ci sono un totale di 64 segnali disponibili. Usa
kill -l
per ottenere l'elenco dei segnali e il numero corrispondente.
Ora che hai compreso i tre segnali principali utilizzati per terminare un processo, scopri come terminare un processo nelle sezioni successive.
Utilizzando il kill
Comando per terminare un processo
In questo prossimo esempio utilizzerai il kill
comando. Fai finta per un momento di eseguire un'istanza di PowerShell, denominata pwsh
e il PID assegnato è 22687. Di seguito è mostrato un modo per terminare questo processo.
- Usa
pgrep pwsh
per determinare il PID per il processopwsh
, utilizzato nelkill
comando. - Usa
kill -s TERM 22687
per terminare ilpwsh
elaborare con grazia. IlTERM
il comando corrisponde al segnale 15 (SIGTERM) e viene indicato usando ils
parametro delkill
comando. - Usa la tua scelta di
top
,ps
opgrep
per verificare che il PID non sia più elencato.
Di seguito è mostrato un esempio del processo sopra da un terminale bash Ubuntu 20.04 LTS.

Il
killall
comando terminerà tutti i processi basati su un nome anziché su PID, il che può rendere questo comando piuttosto distruttivo se usato con noncuranza. Se scegli di usare questo comando, tuttavia, usa ili
opzione per far sì che il comando chieda conferma.
Processi di uccisione per nome con pkill
Potresti aver notato che il kill
il comando funziona solo con gli ID di processo. Ciò può rendere la conclusione di un processo un complicato processo a più fasi. Il pkill
comando, incluso in procps e procps-ng pacchetti, termina un processo basato su un nome cercato.
Funzionalmente, il pkill
il comando funge da wrapper attorno al pgrep
programma. Il pkill
comando invia un segnale specifico a ogni processo trovato invece di elencare solo i PID nel terminale. pkill
differisce da kill
in quel pkill
può utilizzare solo il nome di un processo, non il PID.
Il
pkill
comando non è disponibile, per impostazione predefinita, in Ubuntu 20.04 LTS. Dovrai scaricare e installare l'applicazione. Per farlo, eseguisudo apt install mcollective-plugins-process -y
.
Per terminare un processo usando pkill
, esegui i seguenti passaggi:
- Usa
ps
per verificare che l'applicazione nano (un editor di testo della riga di comando) sia attualmente in esecuzione. Questo passaggio è facoltativo, ma è un controllo di sicurezza prima di terminare un processo. - Usa
pkill -9 nano
per terminare forzatamente l'applicazione nano.
Di seguito è mostrato un esempio del processo sopra da un terminale bash Ubuntu 20.04 LTS.

Uccidere un processo con Top
Comando
Quando esegui top
comando per visualizzare i processi in esecuzione, puoi terminare un determinato processo con la k battitura. Vedrai un prompt interattivo che richiede il PID di un processo da terminare.
Come mostrato di seguito, esegui top
comando e premi k. Inserisci il PID che vuoi eliminare e premi Invio per terminare immediatamente il PID.

Successivamente, scopri un'altra alternativa ai comandi Linux nativi utilizzando PowerShell Stop-Process
comando!
Utilizzo di PowerShell Stop-Process
Comando per terminare un processo
Se i comandi nativi di Linux non fanno per te, PowerShell ti copre! Proprio come con kill
comando, puoi terminare i processi usando il Stop-Process
cmdlet in Linux. Ancora una volta, fai finta di eseguire un pwsh
di PowerShell processo.
- Trova il PID con
Get-Process -ProcessName 'pwsh'
e annota i PID da terminare. - Usa
Stop-Process -Id 29992,30014
per terminare i molteplici processi restituiti. - Usa
Get-Process -ProcessName 'pwsh'
e verifica i PID,29992
e30014
non sono più elencati, il che significa che sono stati chiusi.
Puoi anche usare
Get-Process
e ilkill
metodo per terminare uno o più processi:(Get-Process -Id [PID]).Kill()
o(Get-Process -Id [PID1,2,3,4]).Kill()
.Fai attenzione quando usi il
ProcessName
parametro. L'utilizzo di questo parametro si comporta in modo simile akillall
comando e chiuderà tutti i processi corrispondente al nome o ai nomi forniti.
Di seguito è riportato un esempio del processo precedente da un terminale bash Ubuntu 20.04 LTS.

Passaggi successivi
Ora dovresti conoscere i molti modi per trovare e terminare i processi in Linux! Per la tua prossima sfida, prova a terminare i processi in remoto utilizzando connessioni SSH o uccidendo i processi che potrebbero essere in esecuzione nei container.
Correlato:un ragazzo Windows in un mondo Linux:configurazione di SSH in Linux