c - error in fork and usleep -
मैं यह कोड लिखता हूं:
#include & lt; stdio.h & gt; # शामिल करें & lt; stdlib.h & gt; # शामिल करें & lt; unistd.h & gt; # शामिल करें & lt; signal.h & gt; शून्य साइनचल्ड (इंट सिग्नल) {fprintf (stderr, "[X] बच्चा से बाहर निकल गया \ n"); } Int main () {संकेत (SIGCHLD, signchld); Int i; के लिए (i = 0; i & lt; = 300; i ++) {pid_t f; च = कांटा (); अगर (च == 0) {// बच्चा नींद (3 * 1000000); Fprintf (stderr, "[C1]% d \ n", i); बाहर निकलने के (0); Fprintf (stderr, "[सी 2]% d \ n", i); } और अगर (एफ & gt; 0) {fprintf (stderr, "[P1]% d \ n", i); usleep (20000000); Fprintf (stderr, "[P2]% d \ n", i); }} वापसी 0; } लेकिन [p2] प्रत्येक 3 सेकंड चलाएं और फिर अगले लूप चलाएं मुझे यह आउटपुट देखने की उम्मीद है:
[P1] 0 [C1] 0 [X] बच्चा से बाहर निकल गया
20 सेकंड
[P2] 0 [P1 ] 1 [सी 1] 1 [एक्स] बच्चे से बाहर निकल
यह संकेत हैंडलर < कोड> साइनचल्ड () उस बिगड़ती नींद () माता-पिता में, जैसा कि हम प्रतिस्थापन के द्वारा साबित कर सकते हैं नींद (20000000); के साथ
अगर (नींद (20000000) & lt; 0) {if (errno == EINTR) fprintf (stderr, "[PX] नींद ( ) एक संकेत \ n "द्वारा बाधित;); } (और निश्चित रूप से errno.h सहित)। यह एक प्रिंट [P2] 0 [P1] 1
<>
और इतने पर।
मेरे सिस्टम पर (जीएनयू / लिनक्स) usleep () के लिए मैन पेज पढ़ता है: 4.3 बीएसडी, पीओएसआईएसआईएसआईएसआई -1.2001 POSIX.1-2001 इस समारोह को अप्रचलित घोषित करता है; बजाय नैनोस्ड (2) का उपयोग करें POSIX.1-2008 नींद () के विनिर्देश को हटा देता है।
केवल EINVAL त्रुटि वापसी SUSv2 और POSIX.1-2001 द्वारा प्रलेखित है।
Comments
Post a Comment