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?
93
% 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
Befehl auszuführen .ls: cannot read symbolic link /proc/28783/exe: Permission denied
- Es geht nicht darum, denls
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:
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:quelle
$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
quelle
Quelle:
https://serverfault.com/questions/62322/getting-full-path-of-executables-in-ps-auxwww-output
quelle
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.
quelle
Warum erwarten alle, dass Sie die PID kennen? Hier ist der menschenfreundliche Weg:
quelle
ps
", daher wird wahrscheinlich die PIDlsof 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 $'
quelle
Du könntest benutzen
oder
um den absoluten Weg zu finden. PID ist der Prozess.
quelle