Se ho il numero PID per un processo (su una macchina UNIX), come posso scoprire il nome del processo associato?
Cosa devo fare?
ps -fp PID
mostrerà il comando completo
Se ho il numero PID per un processo (su una macchina UNIX), come posso scoprire il nome del processo associato?
Cosa devo fare?
ps -fp PID
mostrerà il comando completo
Risposte:
Su tutti i sistemi compatibili con POSIX e con Linux, è possibile utilizzare ps
:
ps -p 1337 -o comm=
Qui, il processo è selezionato dal suo PID con -p
. L' -o
opzione specifica il formato di output, comm
ovvero il nome del comando.
Vedi anche: ps
- Le specifiche Open Group Base Numero 6
command
invece lo risolve.
$ ps -p 1 -o comm=
init $ ps -p 1 -o command=
/ sbin / init; il che significa che non ha circa 15 caratteri, forse solo il nome del binario rispetto al suo percorso completo.
comm
dà il nome del binario e command
restituisce l'argomento 0
È possibile trovare il nome del processo o il comando utilizzato dall'ID processo o dal pid
/proc/pid/cmdline
facendo
cat /proc/pid/cmdline
Qui pid è il pid per cui si desidera trovare il nome
per exmaple:
# 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 che usi can
# cat /proc/2480/cmdline
gnome-terminal
Per ottenere il percorso del programma usando un certo pid puoi usare:
ps ax|egrep "^ [PID]"
in alternativa puoi usare:
ps -a [PID]
ps -a
elenca tutti i processi associati al terminale, non richiede alcun input.
ps
versione, dalle procps version 3.2.7
opere a posto.
# 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
readlink /proc/1337/exe
. readlink - stampa collegamenti simbolici risolti o nomi di file canonici.
Puoi usare pmap. Sto cercando PID 6649. E tagliando i dettagli del processo extra.
$ pmap 6649 | head -1
6649: /usr/lib64/firefox/firefox
ps
comando tutto ciò che vedrai sarà giusto java
, ma il resto dei parametri passati verrà visualizzato completamente con pmap
.
Puoi anche usare awk 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 che puoi usare
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
ps ax | grep 1
vedere se restituisce davvero il init
processo, ad esempio. (Nel mio caso, restituisce 119 righe - non desiderabile.)
ps aux | awk 'NR==1 || $2==PID'
- e non c'è bisogno di dire {print $0}
perché è l'impostazione predefinita. Ma come hai commentato, -p
è comunque meglio.
Simile alla risposta di slhck , ma basandosi sulle operazioni sui file anziché sulle chiamate ai comandi:
MYPID=1
cat "/proc/$MYPID/comm"
cat /proc/1/comm
=> init, non / sbin / init. La sua risposta include la versione più lunga. Ma +1 comunque.
Sorprendentemente, nessuno ha menzionato l'opzione -f (comando completo) per ps. Mi piace usarlo con -e (tutto) e convogliare i risultati in 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 prendendo molte risorse sul tuo sistema. Questo ti mostrerà le opzioni e gli argomenti passati al comando.
-e -f
sono disponibili, grep
può produrre molte false corrispondenze, ad esempio grep 33
include pid = 933 o 339, ppid = 33 o 933 o 339, tempo di 33 secondi o 33 minuti, o nome programma o argomento contenente 33 - incluso lo grep
stesso. Tutti (AFAIK) ps
hanno -p
, quindi solo ps -fp 33
.
Trovo che il metodo più semplice sia con il seguente comando:
ps -awxs | grep pid
ps -p${pid}
, questo raccoglierà molti falsi positivi - incluso lo grep
stesso.
fatto un semplice script per trovare PID e usarlo all'interno di script bash ...
usare con cautela !!
Schermata: http://pastebin.com/Cm9YH67U
André
ps
ols -l /proc/$PID/exe