Wenn ich mehrere Kopien derselben Anwendung auf der Festplatte habe und nur eine ausgeführt wird, wie ich sehen kann ps
, wie kann ich den absoluten Pfad kennen, um sie von den anderen zu unterscheiden?
Wenn ich mehrere Kopien derselben Anwendung auf der Festplatte habe und nur eine ausgeführt wird, wie ich sehen kann ps
, wie kann ich den absoluten Pfad kennen, um sie von den anderen zu unterscheiden?
Antworten:
% sudo ls -l /proc/PID/exe
z.B:
% ps -auxwe | grep 24466 wurzel 24466 0.0 0.0 1476 280? S 2009 0:00 überwachen sshd % sudo ls -l / proc / 24466 / exe lrwxrwxrwx 1 root root 0 1. Februar 18:05 / proc / 24466 / exe -> /package/admin/daemontools-0.76/command/supervise
ls: cannot read symbolic link /proc/28783/exe: Permission denied
- Es geht nicht darum, den ls
Befehl auszuführen , sondern auf die Prozessinformationen eines Prozesses zuzugreifen, der Ihnen nicht gehört. Auf meiner Box sind ungefähr 97% aller in / proc aufgelisteten Prozesse Root-Prozesse, und die anderen sind auf 11 verschiedene Benutzer verteilt.
Verwenden:
pwdx $pid
Dies gibt Ihnen das aktuelle Arbeitsverzeichnis der PID, nicht den absoluten Pfad.
Normalerweise which
sagt Ihnen der Befehl, welcher Befehl von der Shell aus aufgerufen wird:
#> which vlc
/usr/bin/vlc
$pid
?" Der bearbeitete Beitrag beantwortet die Frage immer noch nicht. which
sagt nur: "Wenn der Befehl auf dem Pfad ist, was ist er dann?"
pwdx
gib mir den absoluten pfad des ausführbaren programms des prozesses abhängig von pid auf redhat x64 6.3 zurück.
Ein Weg ist ps -ef
ps auxwwwe
Quelle:
https://serverfault.com/questions/62322/getting-full-path-of-executables-in-ps-auxwww-output
Die schnelle Antwort ist die Verwendung ps
mit Optionen oder den /proc
Dateisysteminformationen. Das funktioniert normalerweise , ist aber nicht garantiert. Im Allgemeinen gibt es keine definitive, garantierte Antwort. Was passiert zum Beispiel, wenn die ausführende Datei während der Ausführung gelöscht wird, sodass kein Pfad zu der Datei vorhanden ist?
In den Unix-FAQ finden Sie weitere Informationen, insbesondere zu den Fragen 4.3 und 4.4.
Warum erwarten alle, dass Sie die PID kennen? Hier ist der menschenfreundliche Weg:
pwdx `pgrep ###process_name###`
ps
", daher wird wahrscheinlich die PID
lsof ist eine Option. Sie können Folgendes ausprobieren:
lsof -p PROCESS_ID
Dadurch werden alle vom Prozess geöffneten Dateien aufgelistet, einschließlich des tatsächlichen Speicherorts der ausführbaren Datei. Es ist dann möglich, ein paar weitere awk, cut, grep usw. hinzuzufügen, um die gesuchten Informationen herauszufinden.
Als Beispiel habe ich die folgenden Befehle ausgeführt, um festzustellen, woher mein 'Java'-Prozess stammt:
lsof -p 12345 | awk '{print $ NF}' | grep 'java $'
ls
Befehl auszuführen .