2013-08-17 07:12:47 +0000 2013-08-17 07:12:47 +0000
280
280

Se conosco il numero PID di un processo, come posso sapere il suo nome?

Se ho il numero PID di un processo (su una macchina UNIX), come posso sapere il nome del processo associato?

Cosa devo fare?

Risposte (10)

308
308
308
2013-08-17 08:21:51 +0000

Su tutti i sistemi conformi a POSIX, e con Linux, è possibile utilizzare ps:

ps -p 1337 -o comm=

Qui, il processo è selezionato dal suo PID con -p. L'opzione -o specifica il formato di uscita, comm che significa il nome del comando.

Vedi anche: ps - L'Open Group Base Specifications Issue 6

53
53
53
2013-08-17 08:04:46 +0000

Potete trovare il nome del processo o il comando usato dal processo-id o pid da

/proc/pid/cmdline

facendo

cat /proc/pid/cmdline

Qui pid è il pid per il quale volete trovare il nome Per esempio:

# ps aux

   ................
   ................
   user 2480 0.0 1.2 119100 12728 pts/0 Sl 22:42 0:01 gnome-terminal
   ................
   ................

Per trovare il nome del processo usato da pid 2480 potete usare

# cat /proc/2480/cmdline 

 gnome-terminal
15
15
15
2015-04-18 02:16:04 +0000

Per ottenere il percorso del programma utilizzando un certo pid si può usare:

ps ax|egrep "^ [PID]"

in alternativa si può usare:

ps -a [PID]

8
8
8
2017-05-27 04:28:29 +0000

È possibile utilizzare pmap. Sto cercando PID 6649. E tagliando i dettagli del processo extra.

$ pmap 6649 | head -1
6649: /usr/lib64/firefox/firefox
8
8
8
2016-05-06 00:14:20 +0000
# ls -la /proc/ID_GOES_HERE/exe

Esempio:

# ls -la /proc/1374/exe
lrwxrwxrwx 1 chmm chmm 0 Mai 5 20:46 /proc/1374/exe -> /usr/bin/telegram-desktop
3
3
3
2015-08-30 23:31:50 +0000

Simile a slhck’s Answer , ma basandosi su operazioni di file invece che su invocazioni di comandi:

MYPID=1
cat "/proc/$MYPID/comm"
3
3
3
2013-08-17 09:32:59 +0000

È possibile utilizzare awk anche in combinazione con ps

ps aux | awk '$2 == PID number for a process { print $0 }'

esempio:

root@cprogrammer:~# ps aux | awk '$2 == 1 { print $0 }'
root 1 0.0 0.2 24476 2436 ? Ss 15:38 0:01 /sbin/init

per stampare HEAD LINE è possibile utilizzare

ps --headers aux |head -n 1 && ps aux | awk '$2 == 1 { print $0 }'

                 (or) 

 ps --headers aux |head -n 1; ps aux | awk '$2 == 1 { print $0 }'

root@cprogrammer:~# ps --headers aux |head -n 1 && ps aux | awk '$2 == 1 { print $0 }'
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.2 24476 2436 ? Ss 15:38 0:01 /sbin/init
2
2
2
2016-02-23 21:47:17 +0000

Sorprendentemente, nessuno ha menzionato l'opzione -f (comando completo) per ps. A me piace usarla con -e (tutto) e convogliare i risultati a grep in modo da poter restringere la mia ricerca.

ps -ef | grep <PID>

Questo è anche molto utile per guardare i comandi completi che qualcuno sta eseguendo e che stanno richiedendo molte risorse al vostro sistema. Questo vi mostrerà le opzioni e gli argomenti passati al comando.

0
0
0
2016-11-21 09:48:46 +0000

Trovo il metodo più semplice con il seguente comando:

ps -awxs | grep pid
0
0
0
2016-12-26 15:08:43 +0000

ha fatto un semplice script per trovare PID e utilizzare all'interno di script bash… utilizzare con cautela!

Screenshot:

http://pastebin.com/Cm9YH67U

André