2010-02-01 13:48:15 +0000 2010-02-01 13:48:15 +0000
99
99

Come posso conoscere il percorso assoluto di un processo in corso?

Se ho più copie della stessa applicazione sul disco, e solo una è in esecuzione, come posso vedere con ps, come posso sapere il percorso assoluto per distinguerla dalle altre?

Risposte (8)

117
117
117
2010-02-01 17:04:22 +0000
% sudo ls -l /proc/PID/exe

es:

% ps -auxwe | grep 24466 root 24466 0.0 0.0 1476 280 ? S 2009 0:00 supervise sshd % sudo ls -l /proc/24466/exe lrwxrwxrwx 1 root root 0 Feb 1 18:05 /proc/24466/exe -\> /package/admin/daemontools-0.76/command/supervise
21
21
21
2013-05-03 06:48:17 +0000

Usa:

pwdx $pid

Questo ti dà la directory di lavoro corrente del pid, non il suo percorso assoluto.

Di solito il comando which vi dirà quale è invocato dalla shell:

#> which vlc
/usr/bin/vlc
14
14
14
2010-02-01 13:58:59 +0000

Un modo è ps -ef

4
4
4
2010-02-01 13:53:01 +0000
3
3
3
2017-10-09 15:49:14 +0000

lsof è un'opzione. Puoi provare qualcosa come qui sotto:

lsof -p PROCESS_ID

Questo elencherà tutti i file aperti dal processo inclusa la posizione attuale dell'eseguibile. È poi possibile aggiungere qualche altro comando awk, cut, grep ecc. per trovare le informazioni che si stanno cercando.

Come esempio, ho eseguito i seguenti comandi per identificare la provenienza del mio processo ‘java’:

lsof -p 12345 | awk ‘{print $NF}’ | grep ‘java$’

2
2
2
2010-02-01 14:45:10 +0000

La risposta rapida è di usare ps con opzioni o le informazioni sul filesystem /proc. Questo di solito funziona, ma non è garantito. In generale, non c'è una risposta definitiva e garantita. Per esempio, cosa succede se il file in esecuzione viene cancellato durante l'esecuzione, così che non c'è alcun percorso per il file?

Vedere le FAQ di Unix per un po’ più di dettagli, in particolare le domande 4.3 e 4.4.

2
2
2
2016-04-27 23:28:20 +0000

Perché tutti si aspettano che tu conosca il PID? Ecco il modo più umano:

pwdx `pgrep ###process_name###`
0
0
0
2016-03-05 11:35:41 +0000

Potresti usare

readlink /proc/$(pgrep -x -U $(id -ur) APP_NAME)/exe

o

find /proc/$(pgrep -x -U $(id -ur) APP_NAME)/exe -printf "%l\n"

per ottenere il percorso assoluto. PID è il processo.