Si je vois un processus s'exécuter à l'aide de ps, comment puis-je trouver l'exécutable?

11

Si je peux voir un processus s'exécuter à l'aide de ps -e, comment puis-je trouver le fichier qui l'a lancé?

interstar
la source
2
De quel OS s'agit-il? Linux, BSD, Solaris ...
Patrick
linux ... mais les solutions cross-unix sont les bienvenues.
interstar

Réponses:

15

Sous Linux: si vous connaissez le PID, vous pouvez attraper le fichier cmdline pour ce fichier. Par exemple:

cat /proc/PID/cmdline

Cela échouera probablement si le binaire a été déplacé après le démarrage du programme.

Et bien sûr:

lsof -n | grep PID | grep ' txt '

et:

ls -la /proc/PID/exe

qui est un lien symbolique vers l'exécutable.

Folkert van Heusden
la source
1
Notez qu'il /proc/PID/cmdlinen'a pas de caractère de nouvelle ligne, donc vous voudrez probablement faire quelque chose comme cat /proc/PID/cmdline ; echo ''.
Keith Thompson
En fait, il y a des caractères NUL séparant les arguments, donc vous voudrez peut-être quelque chose d'encore plus élaborétr '\0' ' ' < /proc/PID/cmdline ; echo ''
Keith Thompson
2

Copiez l'ID de processus à partir de la ps -ecommande, puis exécutez ce qui suit:

ps x | grep <process-id>
Aditya Patawari
la source
Cela n'échouera-t-il pas si une application modifie argv [0]? iirc sendmail fait cela.
Folkert van Heusden
Oui, c'est une probabilité. Néanmoins, cela est pratique presque à chaque fois.
Aditya Patawari
0

Aucune des méthodes ( ls, lsofou cat) des autres réponses ne fonctionne pour moi. Si je fais:

$ nano test.txt

Ceci est mon gagnant ,:

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

Ou, afin d'obtenir uniquement le PID pour l'utiliser dans la programmation:

$ pgrep -f test
3074

Testé sur Kali Linux v1.0.6 (basé sur Debian).
Comparé à un simple ls, je dois admettre que ce n'est pas une solution aussi portable, mais au moins ça marche.

Sopalajo de Arrierez
la source