Come trovare il PID di un processo Linux Con pidof o pgrep

0
157
fatmawati achmad zaenuri/Shutterstock.com

Per trovare l'ID processo di un processo Linux, utilizzare il comando pidof, in questo modo: “pidof examplename”. Se conosci solo una parte del nome PID, puoi invece utilizzare “pgrep examplenamefragment”. Sostituisci “examplename” e “examplenamefragment” con i termini che vuoi cercare.

Lavorare con un processo Linux spesso significa conoscerne l'ID processo, o PID. È un numero univoco assegnato a ciascun software in esecuzione. Ecco due modi per scoprire di cosa si tratta.

Sommario

Che cos'è un ID processo Linux?
Come ottenere un PID Linux con il comando pidof
Come trovare PID con il comando pgrep in Linux

Cosa è un ID di processo Linux?

Internamente, Linux tiene traccia del processo in esecuzione assegnando loro un numero ID univoco, chiamato ID processo o PID. Ogni applicazione, utilità e demone in esecuzione ha un PID.

I PID sono valori interi semplici. Un processo appena avviato riceverà un PID superiore all'ultimo PID emesso. Quindi il processo con il PID più alto è il processo più recente, ovvero il processo avviato più di recente. Ciò continua finché il sistema non raggiunge il valore massimo per un PID.

Il limite superiore per un PID è 32768. Una volta raggiunta tale cifra, Linux torna all'inizio e cerca un PID che è diventato libero perché il processo che lo possedeva in precedenza è terminato.

Il processo con un PID pari a 1 è il primo processo che viene avviato quando Linux viene avviato dai processi di avvio. Sui sistemi basati su systemd sarà systemd . Su altri sistemi è probabile che sia init, sebbene alcune distribuzioni Linux utilizzino alternative come OpenRc o s6.

A volte è utile scoprire il PID di un processo, in genere perché si desidera eseguire qualche azione su quel processo. Ecco due diversi metodi per trovare il PID di un processo quando conosci il nome del processo.

RELAZIONATO: Cosa sono i PID Unix e come funzionano?

Come ottenere un PID Linux con il comando pidof

Il comando pidof può essere considerato come la combinazione di “PID” e “di.” È come chiedere qual è il PID di questo processo? Se usiamo il comando senza parametri non fa nulla. Ti riporta silenziosamente al prompt dei comandi. Dobbiamo specificare un nome di processo.

pidof bash

pidof ci dice che il PID della shell Bash è 8304. Possiamo verificarlo con il comando ps. Tutto quello che dobbiamo fare è chiamare ps senza parametri. Riporterà i processi in esecuzione nella sessione corrente.

ps

Poiché ps riporta tutti i processi che può trovare, che includerà se stesso, ci dice che c'è un processo bash e un processo ps in esecuzione. Come ci saremmo aspettati, il processo bash ha lo stesso PID segnalato da pidof.

Se hai più di una finestra di terminale aperta, pidof le riporterà tutte.

pidof bash

Nota che i PID sono elencati dal più alto al più basso o, in altre parole, dal più recente al più vecchio.

RELATEDCome utilizzare il comando ps per monitorare i processi di Linux

Ciò che questo non mostra è che potresti non essere il proprietario di tutti quei processi. pidof trova tutti i processi con nomi corrispondenti, indipendentemente da chi li possiede. Guardiamo più in profondità reindirizzando l'output in grep. Stiamo usando le opzioni -e (seleziona tutti i processi) e -f (lista completa) con ps .

ps -ef | grep bash

Due dei processi bash appartengono all'utente dave, il terzo appartiene all'utente Mary.

A volte un'applicazione genererà molti processi, ognuno dei quali riceve il proprio PID. Questo è ciò che otteniamo con Google Chrome.

pidof chrome

RELAZIONATO: Perché Chrome ha così tanti processi aperti?

Per impostazione predefinita, pidof segnala tutti i processi. Se vogliamo, possiamo chiedere solo il più recente di questi processi. L'opzione -s (single shot) fa proprio questo.

pidof -s chrome

Utilizzare il comando kill per terminare manualmente tutti i processi di Chrome sarebbe noioso. Se catturiamo l'elenco dei processi in una variabile, possiamo passare quella variabile al comando kill. Il comando kill può accettare più PID sul suo comando, quindi accetta felicemente il nostro input e termina tutti i processi per noi.

pid=$(pidof chrome) echo $pid kill $pid pidof chrome

Il primo comando raccoglie l'output da pidof e lo assegna alla nostra variabile, che chiameremo pid. Non abbiamo bisogno di ripeterlo sullo schermo, lo facciamo solo per mostrare cosa contiene la nostra variabile.

Passiamo la variabile al comando kill, quindi usiamo pidof ancora una volta per verificare se rimangono processi di Chrome. Sono stati tutti uccisi.

Una stranezza di pidof è che non restituisce il PID di uno script di shell. Restituisce il PID della shell bash che sta eseguendo lo script. Per vedere la shell che sta eseguendo uno script, dobbiamo usare l'opzione -x (script).

pidof -x sleep-loop.sh ps -e | grep bash

pidof restituisce il PID di una shell bash e ps ci mostra ci sono due shell in esecuzione. Una è la shell che esegue il comando pidof e l'altra è la shell che esegue lo script.

RELAZIONATO: Come utilizzare il comando grep su Linux

Come trovare i PID con il comando pgrep in Linux

Il comando pgrep funziona un po' come pidof nell'ottenere gli ID dei processi in Linux. Tuttavia, non solo trova i processi che corrispondono esattamente all'indizio della ricerca, ma restituisce anche i PID di tutti i processi il cui nome contiene il testo della ricerca.

Ecco un esempio su un computer su cui è in esecuzione Firefox.

pgrep firefox pgrep fire pgrep fox pgrep refo

Tutti questi comandi trovano il processo di Firefox e restituiscono il PID. Ma se avessi inserito il comando:

pgrep refo

Da solo, come sapresti se pgrep ha trovato Firefox e non, diciamo, un dameon chiamato preformd?

Se aggiungi l'opzione -l (list name), pgrep elencherà il nome del processo insieme al PID.

pgrep refo -l

Se sono presenti più istanze di un processo corrispondente, vengono elencate tutte.

pgrep bash

< /p>

Notare che sono elencati in ordine crescente, che è l'ordine opposto all'output di pidof. Sono elencati dal processo più vecchio al processo più recente. Come abbiamo visto con pidof, non tutti i processi elencati appartengono necessariamente a te.

L'opzione -u (user id) ti consente di cercare i processi che corrispondono al testo di ricerca e che sono di proprietà dell'utente indicato.

pgrep bash -u dave

Questa volta vediamo tre processi bash nei risultati. L'altro è usato da Mary.

pgrep bash -u Mary

< p>Possiamo mettere insieme i nomi utente come un elenco separato da virgole.

pgrep bash -u dave,mary -l

E possiamo chiedere di vedere tutti i processi per un utente specifico.

pgrep -u dave -l

Per visualizzare la riga di comando completa, utilizzare l'opzione -a (elenco completo).

pgrep -u dave -a

Una parola sulla proprietà del PID

Non tutti i processi di sistema sono di proprietà dell'utente root. Molti lo sono, ovviamente, ma non tutti. Ad esempio, questo comando funziona:

pgrep avahi-daemon

Ma questo comando non riesce.

pgrep -u root avahi-daemon

Non riesce perché root non possiede quel processo. Il proprietario effettivo è un utente di sistema chiamato “avahi.” Usando il nome utente corretto, il comando funziona.

pgrep -u avahi avahi-daemon

È un piccolo problema a cui prestare attenzione.

File dei comandi di Linux tar · pv · cat · tac · chmod · grep ·  diff · sed · ar · man · pushd · popd · fsck · disco di prova · seq · fd · pandoc · cd · $PATH · awk · join · jq · fold · uniq · journalctl · tail · stat · ls ·fstab · echo · less · chgrp · chown · rev · cerca · stringhe · digita · rinomina · zip · decomprimi · monta · umount · installa · fdisk · mkfs ·< /strong> rm · rmdir · rsync · df · gpg · vi · nano · mkdir · du · ln · patch · convert · rclone · shred · srm Process alias · schermo · in alto · bello · renice · avanzamento · strace · systemd · tmux ·chsh · cronologia · in · batch · gratuito · quale · dmesg · chfn · usermod · ps · chroot · xargs · tty · pinky · lsof · vmstat · timeout ·< /strong> muro ·· uccidi · dormi · sudo · su · time · groupadd · usermod · gruppi · lshw · spegnimento · riavvio · alt · spegnimento · passwd · lscpu · crontab · data · bg · fg Rete netstat · ping · traceroute · ip · ss · whois · fail2ban · bmon · dig · finger · nmap · ftp · curl · wget · who · whoami ·· iptables · ssh-keygen · ufw

RELAZIONATO: I migliori laptop Linux per sviluppatori e appassionati