2013-02-11 18 views
8

wiem, że mogę dostać PID dla procesu za pomocą ps, ale jak za znaleźć pełną ścieżkę tego procesu?Jak uzyskać pełną ścieżkę dla procesu na OS X?

+0

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

+0

możliwy duplikat [Uzyskaj prawdziwą ścieżkę aplikacji z pid?] (http://stackoverflow.com/questions/7511864/get-real-path-of-application- from-pid) – AlphaMale

Odpowiedz

13

OS X zawiera bibliotekę libproc, która może służyć do zbierania różnych informacji o procesach. W celu znalezienia bezwzględną ścieżkę dla danego PID następujący kod może być użyty:

#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; 
} 

przykład kompilowania i bieg (powyżej kod jest przechowywany w pathfind.c, 32291 jest PID proces Próbuję znaleźć informacje na ścieżkę):

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

sprawdź na tym blogu:http://astojanov.wordpress.com/2011/11/16/mac-os-x-resolve-absolute-path-using-process-pid/

9

Jednym z rozwiązań może być usi ng:

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

Gdzie $ PID to pid procesu, który chcesz sprawdzić. Testowane w systemie OS X 10.8.2.

+0

Testowany także na 10.7.5 ... genialny. – Floris

+0

Działa również na 10,5, dzięki @tomis! – AnneTheAgile

+0

Czasami wydaje się, że powraca względne ścieżki. Oto test, który zrobiłem: '$> który \' ps -o comm = -p 81233 \ '=>./Ft_minishell2', ​​to znaczy, nie jest to pełna ścieżka, jak w absolutnej ścieżce. Nie wiem, czy to było początkowe myślenie za tym pytaniem. To jest Mavericks. – conradkdotcom

-4

Spróbuj tego:

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

gdzie $ PROCESS_NAME jest nazwa procesu chcesz sprawdzić.

+3

Nie ma/proc na OS X ... – tomis

+0

Czy słyszał o 'osxfuse' - repozytorium systemu plików zawiera kod źródłowy dla kilku systemów plików ekscytujące i użyteczne dla przeglądanie, kompilacji i czerpać, jak sshfs, procfs, AccessibilityFS, itp. – ymn

+1

Słyszałem o tym (i używam go), ale nie jest tam natywnie ... Wielu użytkowników nie ma tego zainstalowanego. – tomis

Powiązane problemy