Comando pgrep in Linux: cercare PID per nome e utente

pgrep trova gli identificatori di processo (PID) delle attività che corrispondono a condizioni come nome e utente. Serve a individuare i processi e non li termina.

Il modello di ricerca viene applicato normalmente al nome del processo come espressione regolare. Usa -x per richiedere una corrispondenza dell’intero nome e -f per cercare nella riga di comando completa. Quest’ultima può includere più risultati del previsto: esaminali prima di usarli.

Sintassi di base

pgrep [opzioni] modello

Questa guida riguarda procps-ng su Linux. Opzioni e limiti possono variare fra implementazioni; consulta man pgrep nel sistema interessato. Il modello è un’espressione regolare estesa, non una ricerca necessariamente letterale.

Esempi pratici

Cercare PID per nome

Stampa un PID corrispondente per riga. Il modello sshd può corrispondere anche a un nome più lungo che contiene quella sequenza; il comando non avvia il servizio.

pgrep sshd

Mostrare PID e riga di comando

-a aggiunge la riga di comando completa all’output, così puoi riconoscere le attività selezionate. Non amplia da solo il campo in cui si cerca: per quello serve -f.

pgrep -a sshd

Limitare utente e nome completo

Sostituisci alice con un utente presente nel sistema. Il processo deve soddisfare sia il filtro per utente effettivo sia la corrispondenza completa con python3, evitando omonimi appartenenti ad altri utenti.

pgrep -u alice -x python3

-x richiede che il modello copra tutto il nome, ma mantiene la sintassi delle espressioni regolari. Per modelli contenenti spazi o caratteri speciali usa le virgolette della shell; racchiudere un modello tra apici non rende letterali i suoi metacaratteri per pgrep.

Leggere i risultati e l’assenza di corrispondenze

Il risultato di base è un elenco di PID. Ripetendo la ricerca con -a, puoi visualizzare anche la riga di comando per controllare quali attività sono state trovate.

pgrep -a sshd

Esempio illustrativo su un sistema dove è presente un processo corrispondente: il PID e gli argomenti reali possono essere diversi.

1234 /usr/sbin/sshd -D

Nessuna riga può significare che non ci sono corrispondenze, ma prima controlla condizioni, utente e visibilità dei processi. In procps-ng puoi leggere subito $? nella stessa shell: 0 indica almeno una corrispondenza, 1 nessuna, 2 un errore di sintassi e 3 un errore fatale. Un comando successivo sostituisce questo stato.

La ricerca predefinita usa il nome; -f usa invece l’intera riga di comando. Un modello generico può quindi trovare attività inattese. La presenza di una corrispondenza non dimostra che il servizio risponda correttamente alle richieste.

Nell’ambiente Windows con Git Bash disponibile per questa verifica, pgrep non è installato. Sono stati controllati sintatticamente i quattro esempi eseguibili; il comportamento della selezione e i codici di uscita di procps-ng non sono stati verificati mediante esecuzione su Linux.

Opzioni principali

Opzione Significato in procps-ng
-a Mostra PID e riga di comando completa.
-x Richiede la corrispondenza dell’intero nome; con -f, dell’intera riga di comando.
-f Cerca nella riga di comando anziché nel solo nome.
-u utente Seleziona in base all’identificatore utente effettivo (EUID), accettando nome o numero.
-n / -o Seleziona rispettivamente il processo corrispondente avviato più di recente o quello avviato da più tempo.

Il filtro -u usa l’utente effettivo; -U usa quello reale. Non sono necessariamente uguali. Con -n e -o contano i tempi di avvio, non il valore numerico del PID; avvii nello stesso tick di clock possono non essere distinguibili.

Precauzioni prima di usare un PID

Il nome del processo può differire dalla riga di comando. Il manuale procps-ng documenta un limite di 15 caratteri per il nome usato nella ricerca; -f permette di confrontare la riga completa, ma amplia l’ambito del confronto. Controlla i risultati invece di trasformare una ricerca generica in un’azione automatica.

Prima di passare un PID a kill, ricontrolla il comando con ps -p PID -o cmd=, sostituendo PID con il numero trovato. I processi possono terminare e i PID possono essere riutilizzati dopo la ricerca. Anche una verifica appena fatta non elimina completamente questa possibilità.

pgrep consulta informazioni; pkill invia segnali e non è intercambiabile con esso. Gli esempi della guida non inviano segnali e non modificano i processi.

Domande frequenti

Se pgrep non restituisce risultati, è un errore?

Spesso significa che non ci sono processi corrispondenti: in procps-ng lo stato è 1. Distinguilo dagli errori di sintassi o dagli errori fatali. Per confermare lo stato di un servizio considera anche il momento del controllo, i filtri e una verifica specifica del servizio.

Documentazione di riferimento

Consulta il manuale pgrep(1) di procps-ng per criteri, codici di uscita e limiti di corrispondenza; confrontalo con man pgrep della tua installazione.