
Wenn ich zwei ausführbare Dateien ( /path/to/gcc/myapp.exe
, und /path/to/intel/myapp.exe
) habe, von denen eine mit einem Intel-Compiler und die andere mit dem Standard-GCC kompiliert wurde, werden beim Ausführen beider Dateien in top
nur angezeigt myapp
. Wenn ich beide ausführe und Prozesse als ausgeführt werden myapp
, gibt es dann eine Möglichkeit herauszufinden, welcher Prozess aus welcher ausführbaren Datei stammt?
Wir haben eine Menge Apps auf unserem Cluster installiert und mich interessiert nicht nur, welche Apps am häufigsten genutzt werden, sondern auch, welcheVersionender Apps werden verwendet. Wenn ich 500 Ausführungen sehe R
, möchte ich wissen, ob 100 davon von /path/to/R-3.2.1/intel/R
und die anderen 400 von usw. stammen /path/to/R-3.1.3/gcc/R
. Wie kann ich das tun?
Antwort1
Sie können dies mit dem Dateisystem tun /proc
, wie in derproc(5)
Handbuchseite:
/proc/[pid]/exe
Unter Linux 2.2 und höher ist diese Datei ein symbolischer Link, der den tatsächlichen Pfadnamen des ausgeführten Befehls enthält.
Denn es ist einsymbolischer Linklesen Sie dieZiel(Führen Sie einen aus, ls -l
um den Pfadnamen anzuzeigen).
Damit [pid]
ist natürlich eine Prozess-ID für die jeweilige ausführbare Datei gemeint, an der Sie zur Laufzeit interessiert sind.
(Es ist unwahrscheinlich, dass Sie ein System mit einem so alten Linux-Kernel haben, daher sollte „funktioniert immer“ gut genug sein.)
Um eine Zählung zu erhalten, benötigen Sie lediglich ein Skript, das alle Verzeichnisse durchgeht, /proc
die Sie besitzen (da Sie die Programme ausführen, können Sie deren /proc
Daten sehen) und die Pfadnamen mit denen abgleicht, die Sie interessieren. Dasreadlink
Das Programm ist beispielsweise in Bash-Skripten nützlich (und da es Teil von ist coreutils
, haben Sie es wahrscheinlich auf einem Linux-System).
Antwort2
Starten Sie dazu top
und drücken Sie dann c
auf Ihrer Tastatur, um zur vollständigen Pfadansicht zu wechseln.
Antwort3
Wenn diese Prozesse mit unterschiedlichen Befehlszeilen ausgeführt werden (beispielsweise unter Verwendung des vollständigen Pfads), können Sie drücken, c
um die vollständige Befehlszeile, mit der der Prozess ausgeführt wurde, anzuzeigen/auszublenden.