2013-02-11 90 views
8

मुझे पता है कि ps का उपयोग कर प्रक्रिया के लिए मुझे PID मिल सकता है, लेकिन उस प्रक्रिया का पूरा पथ कैसे ढूंढें?ओएस एक्स पर प्रक्रिया के लिए मुझे पूरा पथ कैसे प्राप्त होगा?

+0

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

+0

संभावित डुप्लिकेट [पिड से आवेदन का वास्तविक मार्ग प्राप्त करें?] (http://stackoverflow.com/questions/7511864/get-real-path-of-plication-from-pid) – AlphaMale

उत्तर

13

ओएस एक्स में libproc लाइब्रेरी है, जिसका उपयोग विभिन्न प्रक्रिया सूचनाओं को इकट्ठा करने के लिए किया जा सकता है। आदेश दिए गए पीआईडी ​​के लिए निरपेक्ष पथ खोजने के लिए, निम्न कोड इस्तेमाल किया जा सकता:

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

उदाहरण संकलन और चलाने के लिए (ऊपर कोड pathfind.c में संग्रहीत है, 32,291 की पीआईडी ​​है

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

इस ब्लॉग पोस्ट का संदर्भ लें: प्रक्रिया मैं के लिए पथ जानकारी) को खोजने के लिए कोशिश कर रहा हूँhttp://astojanov.wordpress.com/2011/11/16/mac-os-x-resolve-absolute-path-using-process-pid/

9

एक समाधान हो सकता है उसी एनजी जो:

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

जहां $ पीआईडी ​​प्रक्रिया की पिड है जिसे आप देखना चाहते हैं। ओएस एक्स 10.8.2 पर परीक्षण किया गया।

+0

10.7.5 पर भी परीक्षण किया गया ... शानदार। – Floris

+0

10.5 पर भी काम करता है, धन्यवाद @ टॉमिस! – AnneTheAgile

+0

हालांकि कभी-कभी सापेक्ष पथ वापस आते हैं। यहां मैंने जो परीक्षण किया है: '$> जो \' ps -o comm = -p 81233 \ '=>।/Ft_minishell2', ​​मेरा मतलब है, यह पूर्ण पथ में पूर्णतया नहीं है। पता नहीं है कि क्या सवाल के पीछे यह प्रारंभिक सोच थी। यह मैवरिक्स है। – conradkdotcom

-4

इस प्रयास करें:

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

जहां $ PROCESS_NAME प्रक्रिया के नाम पर आप की जांच करना चाहते है।

+3

ओएस एक्स पर कोई/proc नहीं है ... – tomis

+0

क्या आपने 'osxfuse' के बारे में सुना है - रिपोजिटरी फाइल सिस्टम में ब्राउज़ करने, संकलित करने और निर्माण करने के लिए कई रोमांचक और उपयोगी फ़ाइल सिस्टम के लिए स्रोत कोड शामिल है, जैसे sshfs, procfs, accessibilityFS, आदि – ymn

+1

मैंने इसके बारे में सुना है (और इसका उपयोग कर रहा है) लेकिन यह मूल रूप से वहां नहीं है ... कई उपयोगकर्ताओं ने यह इंस्टॉल नहीं किया है। – tomis