2016-02-14 9 views
5

कैसे प्राप्त कर सकते हैं मैं एक ऐसे प्रोजेक्ट पर काम कर रहा हूं जहां मेरे पास कई पीआईडी ​​हैं और मुझे यह पता लगाना है कि इनमें से कौन सा ज़ोंबी प्रक्रियाएं हैं और फिर मारने के लिए अपनी मूल प्रक्रियाओं को मार दें प्रारंभिक ज़ोंबी प्रक्रिया। मुझे यकीन नहीं है कि किसी दिए गए पीआईडी ​​का पीपीआईडी ​​क्या है इसका पता लगाने का कोई तरीका है। किसी भी सहायता की सराहना की जाएगी।एक बच्चे को पीआईडी ​​दिया गया है आप माता-पिता पीआईडी ​​

+0

संभावित लिपिक [लिनक्स: प्रोग्रामेटिक रूप से किसी अन्य प्रक्रिया के पैरेंट पिड प्राप्त करें?] (Http://stackoverflow.com/questions/1525605/linux-programmatically-get-parent-pid-of-another-process) –

+0

' get_proc_stats' 'libproc' में जो आप चाहते थे वह किया होता। ऐसा लगता है कि इसे सार्वजनिक इंटरफेस से हटा दिया गया है। विकल्प प्राप्त करने के लिए 'ओपनप्रोक' और 'रीडप्रोक' का उपयोग करना है। मैं एक उत्तर पोस्ट करूंगा लेकिन मैं इसे स्वयं काम करने के लिए नहीं मिल सकता ('readproc' में दुर्घटना)। मुझे नहीं पता कि आप किस ओएस का उपयोग कर रहे हैं, इसलिए लागू नहीं हो सकता है। आगे पढ़ने [यहां] (http://stackoverflow.com/questions/6457682/how-to-programatically-get-uid-from-pid-in-osx-using-c), [यहां] (http: // goo .gl/W2BBRy) और [यहां] (https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=731959)। –

+0

सबसे अच्छा जवाब संभवतः उस ओएसई पर निर्भर है जिस पर आप लक्षित कर रहे हैं। लिनक्स के लिए, '/ proc' फाइल सिस्टम है; बीएसडी पर, आपको 'sysctl()' कॉल करने की आवश्यकता होगी। मुझे अन्य प्रणालियों के बारे में पता नहीं है ... –

उत्तर

2

समारोह getppid() करता है कि:

#include <unistd.h> 

int main() 
{ 
    pid_t ppid; 

    ppid = getppid(); 

    return (0); 
} 
+2

यह स्पष्ट रूप से केवल कॉलिंग प्रक्रिया के माता-पिता को प्राप्त करेगा। ओपी मनमाने ढंग से प्रक्रियाओं के साथ ऐसा करना चाहता है, जिनमें से कुछ ज़ोंबी हो सकते हैं, इसलिए यह सवाल को संबोधित नहीं करता है। –

2

ps कमांड के लिए स्रोत पर, वहाँ एक समारोह get_proc_stats बुलाया proc/readproc.h कि (अन्य बातों के अलावा) माता-पिता किसी दिए गए pid की pid रिटर्न में परिभाषित किया गया है। इस फ़ंक्शन को पाने के लिए आपको libproc-dev इंस्टॉल करने की आवश्यकता है। आप तब कर सकते हैं:

#include <proc/readproc.h> 
void printppid(pid_t pid) { 
    proc_t process_info; 
    get_proc_stats(pid, &process_info); 
    printf("Parent of pid=%d is pid=%d\n", pid, process_info.ppid); 
} 

यह here से लिया गया है। मैंने कभी इसका उपयोग नहीं किया लेकिन लेखक के अनुसार यह सहायक हो सकता है।

संबंधित मुद्दे