2013-02-11 6 views
8

Ich weiß, dass ich die PID für einen Prozess mit ps bekommen kann, aber wie man den vollen Weg dieses Prozesses findet?Wie bekomme ich den vollständigen Pfad für einen Prozess unter OS X?

+0

http://superuser.com/questions/103309/how-can-i-know-the-absolute-path-of-a-running-process –

+0

mögliche Duplikate von [Get real Pfad der Anwendung von Pid?] (http://stackoverflow.com/questions/7511864/get-real-path-of-application-from-pid) – AlphaMale

Antwort

13

OS X hat die Bibliothek libproc, die verwendet werden kann, um verschiedene Prozessinformationen zu sammeln. Um die absoluten Pfad für einen gegebenen PID, der folgende Code zu finden verwendet werden:

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
#include <errno.h> 
#include <libproc.h> 

int main (int argc, char* argv[]) 
{ 
    pid_t pid; int ret; 
    char pathbuf[PROC_PIDPATHINFO_MAXSIZE]; 

    if (argc > 1) { 
     pid = (pid_t) atoi(argv[1]); 
     ret = proc_pidpath (pid, pathbuf, sizeof(pathbuf)); 
     if (ret <= 0) { 
      fprintf(stderr, "PID %d: proc_pidpath();\n", pid); 
      fprintf(stderr, " %s\n", strerror(errno)); 
     } else { 
      printf("proc %d: %s\n", pid, pathbuf); 
     } 
    } 

    return 0; 
} 

Beispiel zu kompilieren und laufen (über Code in pathfind.c gespeichert ist, ist 32291 die pid des Prozess ich versuche, für Pfadinformationen zu finden):

$ cc pathfind.c -o pathfind 
$ ./pathfind 32291 
proc 32291: /some/path/your-binary-app 

siehe diesen Blog-Eintrag:http://astojanov.wordpress.com/2011/11/16/mac-os-x-resolve-absolute-path-using-process-pid/

9

Einer Lösung sein kann usi ng which:

which `ps -o comm= -p $PID` 

Wobei $ PID ist pid des Prozesses, den Sie überprüfen möchten. Getestet unter OS X 10.8.2.

+0

Getestet auf 10.7.5 auch ... brillant. – Floris

+0

Funktioniert auch auf 10.5, danke @tomis! – AnneTheAgile

+0

Es scheint jedoch manchmal relative Pfade zurückzugeben. Hier ist der Test, den ich gemacht habe: '$> was \' ps -o comm = -p 81233 \ '=>./Ft_minishell2', ​​ich meine, es ist kein vollständiger Pfad wie im absoluten Pfad. Ich weiß nicht, ob das der anfängliche Gedanke hinter der Frage war. Das ist Mavericks. – conradkdotcom

-4

Try this:

sudo ls -l /proc/$(ps -e | grep $PROCESS_NAME | awk '{print $1}')/exe 

wo $ process_name Name des Prozesses ist es, Sie überprüfen möchten.

+3

Es gibt keine/proc auf OS X ... – tomis

+0

Haben Sie von 'osxfuse' gehört - Das Repository-Dateisystem enthält Quellcode für mehrere spannende und nützliche Dateisysteme zum Durchsuchen, Kompilieren und Erstellen von, wie sshfs, procfs, AccessibilityFS, usw. – ymn

+1

Ich habe davon gehört (und benutze es), aber es ist nicht nativ da ... Viele Benutzer haben dies nicht installiert. – tomis

Verwandte Themen