Est-il possible d'obtenir un nom de fichier d'un processus en utilisant PID? ps affiche de nombreuses informations utiles sur un processus, mais pas un indice sur l'emplacement du fichier exécutable du processus.
13
Une façon d'obtenir l'emplacement binaire du processus est d'utiliser lsof
et grep
pour le premier txt
segment. Par exemple, dans le shell pour voir quel est le binaire du shell, utilisez le PID du shell à la place de $$
.
$ lsof -p $$ | grep txt
bash 78228 blair txt REG 14,2 1244928 6568359 /bin/bash
bash 78228 blair txt REG 14,2 1059792 23699809 /usr/lib/dyld
bash 78228 blair txt REG 14,2 136368128 81751398 /private/var/db/dyld/dyld_shared_cache_i386
Vous pouvez voir que le shell utilise /bin/bash
.
Cette technique fonctionne si le processus a été lancé à l'aide d'un chemin absolu ou relatif. Par exemple, entrer dans un shell et exécuter
$ sleep 1234567
et l'utilisation ps
dans un autre shell montre seulement comment il a été lancé:
$ ps auxww|grep '[s]leep'
blair 79462 0.0 0.0 600908 744 s011 S+ 11:17PM 0:00.00 sleep 1234567
en utilisant lsof
montre quel binaire il a exécuté:
$ lsof -p 79462 | awk '$4 == "txt" { print $9 }'
/opt/local-development/bin/gsleep
J'ai MacPorts coreutils + with_default_names installé, ce qui explique que j'ai ramassé gsleep
et non /bin/sleep
.
; exit
après l'instruction print afin que seule la premièretxt
entrée soit imprimée même s'il y en a plusieurs comme dans l'exemple bash.Exemple: vous recherchez le nom de la commande de processus associé pour
PID 45109
...la source
essayez ps aux
la source
ps -ef avec grep fonctionne pour moi. Pour un nom de fichier spécifique, dirigez simplement grep ainsi:
(Ce dernier 'grep -v grep' vous empêche simplement d'obtenir votre propre commande grep dans la sortie)
la source
ps -p <pid> -Commande
la source