Ist es möglich, mithilfe der PID einen Dateinamen eines Prozesses abzurufen? ps zeigt viele nützliche Informationen zu einem Prozess an, jedoch keinen Hinweis auf den Speicherort einer ausführbaren Prozessdatei.
13
Eine Möglichkeit, die binäre Position des Prozesses zu ermitteln, besteht darin, lsof
und grep
für das erste txt
Segment zu verwenden. Verwenden Sie zum Beispiel in der Shell die PID der Shell anstelle von, um zu sehen, um welche Binärdatei es sich handelt $$
.
$ 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
Sie können sehen, dass die Shell verwendet wird /bin/bash
.
Diese Technik funktioniert, wenn der Prozess mit einem absoluten oder relativen Pfad gestartet wurde. Zum Beispiel in eine Shell gehen und laufen
$ sleep 1234567
und die Verwendung ps
in einer anderen Shell zeigt nur, wie es gestartet wurde:
$ ps auxww|grep '[s]leep'
blair 79462 0.0 0.0 600908 744 s011 S+ 11:17PM 0:00.00 sleep 1234567
using lsof
zeigt, welche Binärdatei ausgeführt wurde:
$ lsof -p 79462 | awk '$4 == "txt" { print $9 }'
/opt/local-development/bin/gsleep
Ich habe MacPorts coreutils + with_default_names installiert, was erklärt, dass ich aufgegriffen habe gsleep
und nicht /bin/sleep
.
; exit
nach der print-Anweisung hinzugefügt, damit nur der erstetxt
Eintrag gedruckt wird, auch wenn es mehrere wie im bash-Beispiel gibt.Beispiel: Sie suchen nach dem Namen des zugeordneten Prozessbefehls für
PID 45109
...quelle
versuche es mit ps aux
quelle
ps -ef mit grep funktioniert bei mir. Für einen bestimmten Dateinamen durchlaufen Sie einfach grep wie folgt:
(Das letzte 'grep -v grep' verhindert einfach, dass Sie Ihren eigenen grep-Befehl in der Ausgabe erhalten.)
quelle
ps -p <pid> -Befehl
quelle