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


93

Se ho più copie della stessa applicazione sul disco e ne è in esecuzione una sola, come posso vedere ps, come posso sapere il percorso assoluto per distinguerlo dagli altri?

Risposte:


110
% sudo ls -l /proc/PID/exe

per esempio:

% ps -auxwe | grep 24466
radice 24466 0,0 0,0 1476 280? S 2009 0:00 supervisione sshd
% sudo ls -l / proc / 24466 / exe
lrwxrwxrwx 1 root root 0 1 febbraio 18:05 / proc / 24466 / exe -> /package/admin/daemontools-0.76/command/supervise

1
Nel mio sistema (ubuntu 14.04) non è necessario essere superutente per eseguire il lscomando.
jarno

3
@jarno ls: cannot read symbolic link /proc/28783/exe: Permission denied: non si tratta di eseguire il lscomando, ma di accedere alle informazioni sul processo di un processo che non ti appartiene. Nella mia scatola, circa il 97% di tutti i processi elencati in / proc sono processi root e gli altri sono distribuiti su 11 utenti diversi.
Irfy,

20

Uso:

pwdx $pid

Questo ti dà l'attuale directory di lavoro del pid, non il suo percorso assoluto.

Di solito il whichcomando ti dirà quale viene invocato dalla shell:

#> which vlc
/usr/bin/vlc

3
questa risposta ha bisogno di più voti ..
Kokizzu,

8
@Kokizzu No, non perché non risponde affatto alla domanda. Il comando quale ti dice solo quale binario verrà eseguito se esegui il comando ora. La domanda era "quale binario è già in esecuzione lì". Immagina per esempio di avere una dozzina di jdks sul tuo computer. Se vuoi sapere per un processo java in esecuzione da quale jdk è stato preso, il che non ti aiuta in questo. Ti dirà solo da quale jdk verrà preso, se lo esegui ora. La risposta accettata è anche quella corretta.
Noamik,

Un modo ovvio in cui questa risposta è sbagliata: sulla mia macchina eseguo processi con diverse versioni JDK e alcuni 32 bit / 64 bit. Se voglio identificare la versione jstack / jmap corretta per il processo, la risposta sopra non funzionerà mentre la risposta accettata lo farà.
Daniel Da Cunha,

@Kokizzu Questo risponde solo alla domanda "Qual è la directory di lavoro corrente del processo $pid?" Il post modificato continua a non rispondere alla domanda. whichdice semplicemente "Se il comando è sul percorso, allora cos'è?"
John Strood,

pwdxrestituiscimi il percorso assoluto dell'esecuibile programma del processo a seconda di pid su redhat x64 6.3.
Nick Dong,

14

Un modo è ps -ef


5
non ha funzionato per un servizio specifico, ha semplicemente fornito il relativo percorso
Jader Dias,

Mi ha aiutato a identificare un processo tramite il comando con cui è stato avviato.
jpierson,


2

La risposta rapida è usare pscon le opzioni o le /procinformazioni sul filesystem. Di solito funzionerà, ma non è garantito. In generale, non esiste una risposta definita e garantita. Ad esempio, cosa succede se il file in esecuzione viene eliminato durante l'esecuzione, in modo che non vi sia alcun percorso per il file?

Vedi le FAQ di Unix per qualche dettaglio in più, in particolare le domande 4.3 e 4.4.


2

Perché tutti si aspettano che tu conosca il PID? Ecco il modo a misura d'uomo:

pwdx `pgrep ###process_name###`

La domanda afferma "come posso vedere con ps", quindi probabilmente visualizzerà il PID
Scz

Ah ok vero. Trovo ancora che questo sia più veloce in molti dei miei casi d'uso.
moodboom

1

lsof è un'opzione. Puoi provare qualcosa come di seguito:

lsof -p PROCESS_ID

Questo elencherà tutti i file aperti dal processo inclusa la posizione effettiva dell'eseguibile. È quindi possibile aggiungere qualche altro awk, cut, grep ecc. Per scoprire le informazioni che stai cercando.

Ad esempio, ho eseguito i seguenti comandi per identificare la provenienza del mio processo "java":

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


In che modo sono esattamente diverse dalle risposte già pubblicate?
Pimp Juice IT

0

Puoi 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.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.