Comment déterminer le chemin vers un binaire d'un processus?

30

Existe-t-il un moyen de découvrir l'emplacement du répertoire / disque à partir duquel un processus a été démarré? Je connais la monture / proc mais pas vraiment où regarder à l'intérieur.

SuperJumbo
la source
1
Voulez-vous dire l'emplacement du binaire ou le répertoire à partir duquel un processus a commencé?
Lekensteyn
Désolé pour l'ambiguïté, je veux dire le binaire
SuperJumbo

Réponses:

37

Le /procmoyen serait d'inspecter le exelien dans le répertoire correspondant au pid.

Prenons un exemple avec update-notifier:

Trouvez le pid, qui est 15421 dans cet exemple:

egil@gud:~$ ps x | grep update-notifier
 2405 pts/4    S+     0:00 grep update-notifier
15421 ?        Sl     0:00 update-notifier

Recherchez le lien symbolique:

egil@gud:~$ file /proc/15421/exe
/proc/15421/exe: symbolic link to `/usr/bin/update-notifier'
Egil
la source
Oh ouais, j'étais presque là. Légende, merci.
SuperJumbo
6

Si vous disposez d'un ID de processus, vous pouvez utiliser:

readlink -f /proc/$pid/exe

(remplacer $pidpar l'ID de processus d'un processus)

Si le processus ne vous appartient pas, vous devrez le mettre sudoen avant.

Un exemple pour déterminer l'emplacement de la commande firefox:

  1. La sortie de ps ax -o pid,cmd | grep firefox:

    22831 grep --color=auto firefox
    28179 /usr/lib/firefox-4.0.1/firefox-bin
    
  2. 28179 est l'ID du processus, vous devez donc exécuter:

    readlink -f /proc/28179/exe
    

    qui génère:

    /usr/bin/firefox
    
Lekensteyn
la source
2
Vous pouvez faire des choses sympas avec /proc/$pid/exe, si le binaire est accidentellement supprimé, vous pouvez le restaurer avec:dd if=/proc/$pid/exe of=restored-binary
Lekensteyn
1

Appuyez sur Ctrl+ Alt+ Tpour accéder à un terminal et saisissez:

ls -al /proc/{pid}/fd  

puis vérifiez la sortie

Cela répertoriera tous les fichiers auxquels votre processus est associé ...

xiaoyifang
la source
Pourriez-vous s'il vous plaît revoir mes modifications et également revoir l' aide à la modification pour améliorer la lisibilité de vos réponses à l'avenir ... ;-)
Fabby
0

Toutes les commandes des autres réponses sont bonnes, mais vous pourriez faire encore plus - voir comment certains processus ont été réellement exécutés avant d'arriver à la liste des processus.

Run in terminal:

top

Et pendant qu'il s'exécute, appuyez sur le clavier Cet vous obtiendrez une commande des processus qui ont été exécutés.

Aleks
la source