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?
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:
% 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
ls: cannot read symbolic link /proc/28783/exe: Permission denied
: non si tratta di eseguire il ls
comando, 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.
Uso:
pwdx $pid
Questo ti dà l'attuale directory di lavoro del pid, non il suo percorso assoluto.
Di solito il which
comando ti dirà quale viene invocato dalla shell:
#> which vlc
/usr/bin/vlc
$pid
?" Il post modificato continua a non rispondere alla domanda. which
dice semplicemente "Se il comando è sul percorso, allora cos'è?"
pwdx
restituiscimi il percorso assoluto dell'esecuibile programma del processo a seconda di pid su redhat x64 6.3.
Un modo è ps -ef
ps auxwwwe
Fonte:
https://serverfault.com/questions/62322/getting-full-path-of-executables-in-ps-auxwww-output
La risposta rapida è usare ps
con le opzioni o le /proc
informazioni 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.
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 $'
ls
comando.