Réponses:
Une façon d'obtenir l'emplacement binaire du processus est d'utiliser lsofet greppour le premier txtsegment. 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 psdans 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 lsofmontre 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é gsleepet non /bin/sleep.
Exemple: vous recherchez le nom de la commande de processus associé pour PID 45109...
> % ps awx | awk '$1 == 45109 { print $5 }'
> /Applications/Safari.app/Contents/MacOS/Safari
ps -ef avec grep fonctionne pour moi. Pour un nom de fichier spécifique, dirigez simplement grep ainsi:
MacBook:~ Me$ ps -ef | grep Safari | grep -v grep
501 15733 301 0 0:25.76 ?? 1:58.24 /Applications/Safari.app/Contents/MacOS/Safari -psn_0_4977855
(Ce dernier 'grep -v grep' vous empêche simplement d'obtenir votre propre commande grep dans la sortie)
; exitaprès l'instruction print afin que seule la premièretxtentrée soit imprimée même s'il y en a plusieurs comme dans l'exemple bash.