Master Linux Kill Process Using ps, pgrep, pkill and More

Gestire i processi in Linux può sembrare intimidatorio per un nuovo amministratore di sistema (sysadmin) all’inizio. Ma con un po’ di spiegazione e dimostrazione, imparerai che trovare ed eseguire il kill dei processi Linux è solo una questione di utilizzo di strumenti da riga di comando come ps e kill.

In questo articolo, imparerai i comandi per individuare i processi in esecuzione e quelli errati, terminare i processi in esecuzione, individuare i processi in background e molto altro su qualsiasi sistema operativo Linux.

Alla fine dell’articolo, sarai in grado di gestire i processi basandoti sui numeri di identificazione dei processi (PID) dalla riga di comando come un professionista di Linux. Continua a leggere per conoscere tutti i comandi di gestione dei processi in Linux!

Prerequisiti

Questo articolo sarà una guida su come gestire i processi in Linux. Se vuoi metterti alla prova, avrai bisogno dei seguenti elementi:

  • A Linux host, which can be a virtual machine or a physical machine.
  • Per provare gli esempi di PowerShell, installa PowerShell 7.1.1 su un host Linux.
  • A non-root user account. While root access is not required, there will be an example where the root user can kill the running process of another user.

La distribuzione di Linux che scegli di utilizzare è a tua discrezione. Questo articolo si baserà su Ubuntu 20.04 LTS. Tuttavia, i comandi sono standard per il sistema operativo Linux.

Pronto per iniziare? Ottimo, immergiamoci.

Gestione dei processi in Linux

Di tanto in tanto, potresti trovarvi in una situazione 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 un programma cron (scheduler di processi Linux).

A volte, questo script genera processi errati che possono far fallire lo script. Come si possono terminare quei processi errati senza riavviare il sistema o interrompere lo script?

Nelle prossime sezioni, verranno esaminati i comandi utilizzati per individuare e terminare o kill i processi su un sistema Linux. Ogni sezione si baserà sulla precedente. Imparerai i comandi ps, top, pgrep, kill e pkill, tutti nativi di Linux.

Come bonus, sono inclusi i comandi equivalenti di PowerShell Get-Process e Stop-Process se i comandi nativi di Linux non sono di tuo gradimento.

Strumenti per individuare i 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 imparare come individuare i processi corretti da terminare.

Utilizzo del comando ps per visualizzare le informazioni sui processi

Il comando Stato del processo o comando ps visualizza informazioni relative ai processi attivi su un sistema Linux. Puoi individuare un processo in esecuzione e persino i processi in background con il comando ps.

Il comando ps visualizzerà, per impostazione predefinita, tutti i processi per l’identificazione utente effettiva (EUID) dell’utente corrente. Eseguire il comando ps, come mostrato di seguito, restituirà ogni processo in esecuzione che l’utente può terminare.

ps
Displaying processes matching the EUID (effective user ID) for the user bkindle.

Trovare informazioni dettagliate sul processo usando il comando top

Cosa fare se si desidera trovare informazioni costantemente aggiornate sui processi in esecuzione e sulle metriche di sistema, in tal caso, è possibile utilizzare il comando top. A differenza di ps, il comando top aggiorna le informazioni sul processo sullo schermo ad intervalli prestabiliti.

Quando si esegue il comando top, si vedranno più informazioni oltre al PID. Con i dettagli del processo sono inclusi percentuali di CPU e memoria, Valori Nice (priorità di pianificazione del processo CPU), e la priorità del processo (PR) impostata dal kernel Linux.

Per un amministratore di sistema nuovo o esperto, il comando top è spesso lo strumento principale per gestire risorse di sistema cruciali e processi. Come mostrato di seguito, l’output del comando top visualizza più informazioni sul processo rispetto al comando ps, inclusi i dati complessivi sulle metriche di sistema.

The top command on Ubuntu Desktop 20.04 LTS showing all running PID’s.

htop è una variante migliorata di top che include vari miglioramenti, come un output terminale colorato.

Diciamo che vuoi ispezionare la memoria o le risorse CPU che un processo sta consumando. In tal caso, puoi utilizzare l’interruttore p di top come mostrato di seguito.

top -p 2113
The top command displaying information on only one PID, 2113.

Forse hai bisogno di visualizzare tutti i processi in esecuzione per un nome utente specifico. Il comando top offre l’interruttore u per visualizzare solo i processi di un utente specifico. Come si vede nell’esempio seguente, vengono mostrati solo i PID corrispondenti all’ID utente bkindle.

top -u bkindle
The top command displaying only processes for the user bkindle.

Individuazione dei PID dei processi specifici con il comando pgrep

Originariamente un comando Solaris, pgrep è stato portato per l’uso con Linux. Combinando la potenza di ricerca del comando grep e la gestione dei processi di ps, pgrep offre flessibilità nel trovare il processo esatto da individuare.

Anche se ps visualizza più informazioni, pgrep è progettato per restituire solo il PID dei processi restituiti. pgrep aiuta nella individuazione del processo utilizzando molti parametri di ricerca disponibili. Nell’esempio seguente, pgrep viene mostrato alla ricerca di qualsiasi processo corrispondente a vmtoolsd.

pgrep vmtoolsd
Using pgrep to obtain all PIDs associated with vmtoolsd.

Allo stesso modo, specifica un ID utente con l’interruttore u per recuperare solo i processi associati a quel determinato utente. Come mostrato di seguito, viene restituito solo un singolo PID per l’utente bkindle e il processo vmtoolsd.

pgrep -u bkindle vmtoolsd
Retrieving the specific PID for the vmtoolsd process associated with the user bkindle.

Trovare i processi con il comando Get-Process di PowerShell in Linux

I comandi tipici di Linux funzionano molto bene, ma sapevi che PowerShell è in grado di gestire anche i processi di Linux? Il cmdlet Get-Process funziona in modo simile al comando ps di Linux e restituisce informazioni sui processi. Ad esempio, forse hai bisogno di trovare tutti i processi in esecuzione dall’utente corrente, bkindle. Come mostrato di seguito, trova tutti i PID (etichettati come ID da Get-Process) dell’utente bkindle.

Get-Process -IncludeUserName |
	Where-Object {$_.UserName -eq 'bkindle'} |
	Select-Object -Property 'Id','UserName','ProcessName'
Retrieving Linux PID’s with PowerShell’s Get-Process cmdlet.

Correlato: Come usare l’oggetto Where-Object di PowerShell per filtrare tutto

Dopo aver imparato come individuare diversi processi, continua a leggere per scoprire tutti i modi per terminare o uccidere un processo in Linux!

Uccidere i processi usando i comandi Kill in Linux

Nelle sezioni precedenti, hai imparato come individuare il PID del processo a cui desideri inviare un segnale di kill utilizzando comandi nativi di Linux e di PowerShell. Le sezioni successive spiegheranno come utilizzare i programmi kill e pkill, i relativi segnali e gli interruttori della riga di comando.

Segnali di Linux e gestione dei processi

I segnali sono il metodo che Linux utilizza per comunicare con i processi in esecuzione nel sistema operativo. I tre segnali principali che il comando kill utilizza per terminare i processi sono:

  • 1 (SIGHUP) – Termina i programmi interattivi e fa sì che i daemon (servizi in background) leggano nuovamente i file di configurazione utilizzati dal processo.
  • 9 (SIGKILL) – Forza il processo ad uscire senza eseguire operazioni di chiusura corrette.
  • 15 (SIGTERM) – Consente a un processo di terminare correttamente, ad esempio chiudendo i file aperti al termine. Questo è il segnale predefinito utilizzato quando non viene specificato alcun numero durante l’utilizzo del comando kill.

Anche se questo articolo si concentra solo sui tre segnali principali utilizzati per terminare i processi, esistono in totale 64 segnali disponibili. Utilizza il comando kill -l per ottenere l’elenco dei segnali e il loro numero corrispondente.

Great video on understanding process signals

Ora che hai compreso i tre segnali principali utilizzati per terminare un processo, scopri come terminare un processo nelle sezioni successive.

Utilizzo del comando kill per terminare un processo

In questo prossimo esempio, userai il comando kill. Fingiamo per un attimo di eseguire un’istanza di PowerShell, chiamata pwsh, e l’ID di processo assegnato è 22687. Un modo per terminare questo processo è mostrato di seguito.

  1. Utilizza pgrep pwsh per determinare l’ID di processo del processo pwsh, utilizzato nel comando kill.
  2. Usa il comando kill -s TERM 22687 per terminare il processo pwsh in modo delicato. Il comando TERM corrisponde al segnale 15 (SIGTERM) ed è indicato utilizzando il parametro s del comando kill.
  3. Usa il tuo comando preferito tra top, ps o pgrep per verificare che il PID non sia più elencato.

Di seguito è mostrato un esempio del processo sopra descritto da un terminale bash Ubuntu 20.04 LTS.

Using kill and associated commands to terminate the pwsh process.

Il comando killall terminerà tutti i processi basati su un nome invece che su un PID, il che può rendere questo comando piuttosto distruttivo se usato incautamente. Se decidi di utilizzare questo comando, tuttavia, usa l’opzione i per far sì che il comando chieda conferma.

Terminazione dei processi per nome con pkill

Potresti aver notato che il comando kill funziona solo con gli ID dei processi. Questo può rendere la terminazione di un processo un processo complicato e multistep. Il comando pkill , incluso nei pacchetti procps e procps-ng, termina un processo basato su un nome cercato.

Funzionalmente, il comando pkill funge da wrapper attorno al programma pgrep. Il comando pkill invia un segnale specificato ad ogni processo trovato anziché elencare solo i PID nel terminale. pkill differisce da kill nel senso che pkill può utilizzare solo il nome di un processo, non il PID.

Il comando pkill non è disponibile, di default, in Ubuntu 20.04 LTS. Dovrai scaricare e installare l’applicazione. Per farlo, esegui sudo apt install mcollective-plugins-process -y.

Per terminare un processo utilizzando pkill, esegui i seguenti passaggi:

  1. Usa ps per verificare che l’applicazione nano (un editor di testo a riga di comando) sia attualmente in esecuzione. Questo passaggio è opzionale, ma una verifica di sicurezza prima di terminare un processo.
  2. Usa pkill -9 nano per terminare forzatamente l’applicazione nano.

Di seguito è riportato un esempio del processo sopra descritto da un terminale bash di Ubuntu 20.04 LTS.

Using the pkill command to forcefully terminate the nano process.

Terminare un Processo con il Comando Top

Quando esegui il comando top per visualizzare i processi in esecuzione, puoi terminare un dato processo con il tasto k. Vedrai un prompt interattivo che chiede il PID di un processo da terminare.

Come mostrato di seguito, esegui il comando top e premi k. Inserisci il PID che desideri terminare e premi il tasto Invio per terminare immediatamente il PID.

Use top to specify a process to terminate using the k keystroke.

Successivamente, impara un’altra alternativa ai comandi nativi di Linux utilizzando il comando Stop-Process di PowerShell!

Utilizzare il comando PowerShell Stop-Process per terminare un processo

Se i comandi nativi di Linux non sono di tuo gradimento, PowerShell è la soluzione! Proprio come con il comando kill, puoi terminare i processi utilizzando il Stop-Process cmdlet in Linux. Ancora una volta, fai finta di eseguire un processo PowerShell pwsh.

  1. Trova il PID con Get-Process -ProcessName 'pwsh' e annota i PID da terminare.
  2. Usa Stop-Process -Id 29992,30014 per terminare i processi multipli restituiti.
  3. Usa Get-Process -ProcessName 'pwsh' e verifica i PID, 29992 e 30014 non sono più elencati, il che significa che sono stati terminati.

Puoi anche utilizzare Get-Process e il metodo kill per terminare uno o più processi: (Get-Process -Id [PID]).Kill() o (Get-Process -Id [PID1,2,3,4]).Kill().

Esercita cautela quando utilizzi il parametro ProcessName. Utilizzare questo parametro comporta un comportamento simile al comando killall, e terminerà tutti i processi che corrispondono ai nomi forniti.

Di seguito è riportato un esempio della procedura precedente da un terminale bash di Ubuntu 20.04 LTS.

Using PowerShell, Stop-Process to kill processes in Linux.

Passaggi successivi

Dovresti ora conoscere i molti modi per trovare e terminare processi in Linux! Per la tua prossima sfida, prova a terminare processi in modo remoto usando connessioni SSH o terminando processi che potrebbero essere in esecuzione nei contenitori.

Correlato: Un ragazzo Windows in un mondo Linux: Configurazione di SSH in Linux

Source:
https://adamtheautomator.com/linux-kill-process/