2010-04-07 18 views
5

मैं यह पता लगाने की कोशिश कर रहा हूं कि पिड एक प्रक्रिया है जो सिगचल सिग्नल भेजता है, और मैं इसे सिग्नल के लिए बनाए गए सिग्नल हैंडलर में करना चाहता हूं। यह मैं कैसे करूंगा? मैं कोशिश कर रहा हूँ:समाप्त प्रक्रिया की पिड निर्धारित करें

int pid = waitpid(-1, NULL, WNOHANG); 

क्योंकि मैं किसी भी बच्चे प्रक्रिया है कि पैदा की है के लिए इंतजार करना चाहते हैं।

+0

आपका दृष्टिकोण सही है, इसे काम करना चाहिए। आपका सवाल क्या हैं? – qrdl

+0

मैं सिगचल्ड भेजा गया प्रक्रिया की पिड कैसे प्राप्त करूं? – Hristo

+2

'प्रतीक्षापिड()' समाप्त होने वाले बच्चे की पिड देता है, अगर आप इसे अपने सिग्नल हैंडलर से कॉल करते हैं। – qrdl

उत्तर

7

यदि आप waitpid() दिखाए गए अनुसार कम या ज्यादा उपयोग करते हैं, तो आपको मरने वाली बाल प्रक्रियाओं में से एक के पीआईडी ​​को बताया जाएगा - आमतौर पर यह एकमात्र प्रक्रिया होगी जो मर गई है, लेकिन यदि आप उनमें से घबराहट करते हैं, आपको एक सिग्नल और कई लाश इकट्ठा करने के लिए मिल सकता है। तो, का उपयोग करें:

void sigchld_handler(int signum) 
{ 
    pid_t pid; 
    int status; 
    while ((pid = waitpid(-1, &status, WNOHANG)) != -1) 
    { 
     unregister_child(pid, status); // Or whatever you need to do with the PID 
    } 
} 

आप NULL साथ &status की जगह ले सकता है अगर आप बच्चे के निकास स्थिति के बारे में परवाह नहीं है।