GNU/Linux >> Linux Esercitazione >  >> Linux

Padroneggia il processo di uccisione di Linux utilizzando ps, pgrep, pkill e altro

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.

  1. Usa pgrep pwsh per determinare il PID per il processo pwsh , utilizzato nel kill comando.
  2. Usa kill -s TERM 22687 per terminare il pwsh elaborare con grazia. Il TERM il comando corrisponde al segnale 15 (SIGTERM) e viene indicato usando il s parametro del kill comando.
  3. Usa la tua scelta di top , ps o pgrep 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 il i 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, esegui sudo apt install mcollective-plugins-process -y .

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

  1. 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.
  2. 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.

  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 molteplici processi restituiti.
  3. Usa Get-Process -ProcessName 'pwsh' e verifica i PID, 29992 e 30014 non sono più elencati, il che significa che sono stati chiusi.

Puoi anche usare Get-Process e il kill 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 a killall 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


Linux
  1. Come trovare e uccidere il processo Zombie in Linux

  2. La differenza tra Kill, Pkill e Killall?

  3. Come uccidere un processo su Linux usando il comando?

  4. script linux per terminare il processo java

  5. Come terminare tutti i processi restituiti da pgrep

Come uccidere i processi Zombie in Linux

Fkill:cerca e uccidi in modo interattivo i processi su Linux

Come trovare e uccidere i processi in esecuzione in Linux

Come individuare e terminare un processo con il terminale Linux

Monitoraggio dei processi su Linux

Come uccidere i processi in Linux usando kill, killall e pkill