2010-12-22 4 views
6

मैं एक ऑपरेटिंग सिस्टम कोर्स के लिए एक असाइनमेंट के रूप में एक प्रोग्राम मॉनीटर लिख रहा हूं (हालांकि मूलभूत, इसके लिए एक परिचय की तरह)।कैसे पता चलेगा कि एक प्रोग्राम ने सिग्नल के माध्यम से अपना निष्पादन समाप्त कर दिया है?

मॉनीटर को जो कुछ करना है, वह उस कार्यक्रम के समापन कोड को दिखाने के लिए है, जो इसे "प्राकृतिक कारणों" या उसके समापन के लिए जिम्मेदार सिग्नल के कोड द्वारा समाप्त किया गया था।

अभी मैं बस बच्चे के निष्पादन को समाप्त करने और उसके समापन कोड को कैप्चर करने का इंतजार कर रहा हूं।

pid_t id = -1; 
switch (id = fork()) { 
    // Error when forking: 
    case -1: 
     error(-1, "Something went wrong when forking."); 
     exit(-1); 
    // Code for the child process: 
    case 0: 
     // Just launch the program we're asked to: 
     execvp(argv[2], &argv[2]); 
     // If reached here it wasn't possible to launch the process: 
     error(1, "Process could not be launched."); 
     exit(1); 
    // Code for the parent process: 
    default: 
     // Just wait for the child to finish its execution: 
     wait(&return_value); 
} 

error(2), एक लकड़हारा समारोह है बस जब भी एक त्रुटि पैदा होती कोड सरल करने के लिए: यह संबंधित कोड का टुकड़ा है।

कैसे प्रक्रिया मैं अलग बयानों को दिखाने के लिए पर निर्भर करता है:

Process ended: X 

या

Process terminated with signal X. 

कहाँ एक्स समाप्ति कोड या संकेत प्राप्त होगा। सिग्नल के कारण बाल प्रक्रिया समाप्त होने पर हम कैसे जान सकते हैं?

उत्तर

5

wait(2) से:

WIFSIGNALED(status) 
      returns true if the child process was terminated by a signal. 
    WTERMSIG(status) 
      returns the number of the signal that caused the child process to terminate. 

तो तुम WIFSIGNALED(return_value) जांच करने की आवश्यकता है और यदि यह सच है, जाँच WTERMSIG(return_value)

+0

धन्यवाद! मुझे मैनुअल में यह मिलना चाहिए था ... मुझे इसके बारे में खेद है। – Johannes

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

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