2013-03-21 8 views
21

में अपने पिड से प्रक्रिया का नाम उसकी पिड से प्रक्रिया का नाम कैसे प्राप्त करें? उदाहरण के लिए मैं cat file1.txt निष्पादित करता हूं, लेकिन मैं सिस्टम में अपने पिड के बाद उस बिल्ली कमांड और इसके तर्कों को समझना चाहता हूं। क्या यह निर्धारित करने के लिए कोई संरचना है या कुछ समान है? कोई उपाय?लिनक्स

+1

संभावित डुप्लिकेट [पीआईडी ​​द्वारा प्रक्रिया का नाम प्राप्त करें] (http://stackoverflow.com/questions/4189717/get-process-name-by-pid) – Hasturkun

उत्तर

22

इस यूनिक्स को करने का कोई सामान्य तरीका नहीं है।
प्रत्येक ओएस के पास इसे संभालने के विभिन्न तरीके हैं और कुछ बहुत कठिन हैं। हालांकि आप लिनक्स का जिक्र करते हैं। लिनक्स के साथ, जानकारी/proc फाइल सिस्टम में है।
प्रक्रिया आईडी 99 99 के लिए कमांड लाइन प्राप्त करने के लिए, फ़ाइल /proc/9999/cmdline पढ़ें।

+10

और प्रक्रिया आईडी 99 99 के लिए प्रक्रिया का नाम प्राप्त करने के लिए, पढ़ें फाइल '/ proc/9999/comm'। –

+1

सवाल यह था कि प्रक्रिया नाम कैसे प्राप्त करें, कमांडलाइन नहीं। मेरे SUSE पर मैं एक kwrite प्रक्रिया के लिए 'head/proc/9999/cmdline' दर्ज करता हूं और यह लौटाता है: 'kdeinit4: kwrite [kdeinit]'। यदि मैं/cmdline के बजाय/comm का उपयोग करता हूं तो मुझे सही परिणाम मिलता है: 'kwrite'। – Elmue

13

लिनक्स पर, आप /proc/ देख सकते हैं। अधिक जानकारी के लिए man proc टाइप करने का प्रयास करें। /proc/$PID/cmdline की सामग्री आपको कमांड लाइन देगी जो $PID को संसाधित करती है। खुद की जांच के लिए /proc/self भी है :)

एक विकल्प (जैसे मैक ओएस एक्स) libproc का उपयोग करना है। libproc.h देखें।

+0

क्या आप कृपया मुझे अपने उत्तर और मेरे बीच का अंतर बता सकते हैं? :) – Anubhab

+9

जब मैंने मेरा लेखन शुरू किया था तो आपका जवाब वहां नहीं था :) –

+0

HAHAHA ..: डी .... – Anubhab

8

POSIX सी पीआईडी ​​द्वारा प्रक्रिया नाम प्राप्त करने के लिए मानक API देने का समर्थन नहीं करता है।

लिनक्स में, आप LINUX प्रो एपीआई:/proc/$ PID/cmdline द्वारा नाम प्राप्त कर सकते हैं। और कोड इस तरह दिखता है:

const char* get_process_name_by_pid(const int pid) 
{ 
    char* name = (char*)calloc(1024,sizeof(char)); 
    if(name){ 
     sprintf(name, "/proc/%d/cmdline",pid); 
     FILE* f = fopen(name,"r"); 
     if(f){ 
      size_t size; 
      size = fread(name, sizeof(char), 1024, f); 
      if(size>0){ 
       if('\n'==name[size-1]) 
        name[size-1]='\0'; 
      } 
      fclose(f); 
     } 
    } 
    return name; 
} 
+1

और यदि आप यहां आए थे मोनो के साथ काम कर रहे सी # में समाधान, फिर इसे देखें: http://stackoverflow.com/questions/29827331/workaround-for-bug-in-mono-wrong-process-processname-solved – Elmue

6

एक प्रक्रिया आईडी की प्रक्रिया नाम प्राप्त करने के लिए 9000 उपयोग इस आदेश का कहना है:

ps -p 9000 -o comm= 
2

इस सवाल का जवाब दिया गया है, मैं चाहता हूँ जोड़ने के लिए मेरी 2 सेंट

मेरे मामले में, जब प्रक्रिया 1111 पाइप के माध्यम से प्रक्रिया 22222 बनाता है (कम से कम यह मैंने सुना है),/proc/2222/cmdline सही प्रक्रिया नाम नहीं देता है, लेकिन इसके बजाय 1111_1 की तरह कुछ देता है। मुझे सही प्रक्रिया नाम प्राप्त करने के लिए/proc/2222/comm का उपयोग करना होगा।