Se vedo un processo in esecuzione usando ps, come posso trovare l'eseguibile?


11

Se riesco a vedere un processo in esecuzione utilizzando ps -e, come posso trovare il file che lo ha avviato?


2
Che sistema operativo è questo? Linux, BSD, Solaris ...
Patrick,

Linux ... ma le soluzioni cross-unix sono benvenute.
interstar

Risposte:


15

Su Linux: se conosci il PID, puoi catalogare il file cmdline per quel file. Per esempio:

cat /proc/PID/cmdline

Questo probabilmente fallirà se il binario è stato spostato dopo l'avvio del programma.

Ed ovviamente:

lsof -n | grep PID | grep ' txt '

e:

ls -la /proc/PID/exe

che è un collegamento simbolico all'eseguibile.


1
Nota che /proc/PID/cmdlinenon ha un carattere newline, quindi probabilmente vorrai fare qualcosa del genere cat /proc/PID/cmdline ; echo ''.
Keith Thompson, il

In realtà, ha caratteri NUL che separano gli argomenti, quindi potresti voler qualcosa di ancora più elaborato cometr '\0' ' ' < /proc/PID/cmdline ; echo ''
Keith Thompson,

2

Copia l'id del processo dal ps -ecomando, quindi esegui quanto segue:

ps x | grep <process-id>

Non fallirà se un'applicazione modifica argv [0]? iirc sendmail lo fa.
Folkert van Heusden,

Sì, è una probabilità. Tuttavia, questo è utile quasi ogni volta.
Aditya Patawari,

0

Nessuno dei metodi ( ls, lsofo cat) nelle altre risposte funziona per me. Se lo faccio:

$ nano test.txt

Questo è il mio vincitore:

$ pgrep -f -l test
3074 nano test.txt

Oppure, al fine di ottenere solo il PID per usarlo nella programmazione:

$ pgrep -f test
3074

Testato su Kali Linux v1.0.6 (basato su Debian).
Rispetto a un semplice ls, devo ammettere che non è una soluzione così portatile, ma almeno funziona.

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.