1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 | #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <signal.h> int N = 5; int _pipe[2]; pid_t children[5]; int main(){ pid_t parent_pid; pid_t pid; int i = 0; int return_val; //we're not going to use this, but need it to call sigwait() sigset_t set; sigfillset(&set); sigprocmask(SIG_BLOCK, &set, NULL); parent_pid = getpid(); fprintf(stderr,"I am main process, here comes my pid %u\n",getpid()); if (0>pipe(_pipe)) fprintf(stderr,"Error when creating pipe"); //Start creating child processes while (i < N){ pid = fork(); if (pid == 0){ close(_pipe[1]); break; } else{ fprintf(stderr,"Created child with pid %u\n",pid); children[i] = pid; write(_pipe[1],&pid,sizeof(pid_t)); } i = i+1; } i = 0; // What main process does if (pid>0){ close(_pipe[0]); close(_pipe[1]); //sleep(2); // Main process sends signal to each child while(i < N){ kill(children[i],SIGUSR1); fprintf(stderr,"Sent SIGUSR1 to child %u\n",children[i]); // .. Now just wait for SIGUSR2 arrival sigwait(&set, &return_val); i = i+1; } } // What children do else{ // Wait for main process SIGUSR1 delivery sigwait(&set, &return_val); fprintf(stderr, "SIGUSR1 arrived child %u from its father\n",getpid()); // Once SIGUSR1 has arrived, pipe is read N times while((i < N) && (read(_pipe[0],&pid,sizeof(pid_t))>0)){ children[i] = pid; i = i+1; } close(_pipe[0]); // After reading pipe, a reply is sent to parent process kill(parent_pid,SIGUSR2); } return 0; } |
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPHVuaXN0ZC5oPgojaW5jbHVkZSA8c2lnbmFsLmg+CgppbnQgTiA9IDU7CmludCBfcGlwZVsyXTsKcGlkX3QgY2hpbGRyZW5bNV07CgppbnQgbWFpbigpewogICAgcGlkX3QgcGFyZW50X3BpZDsKICAgIHBpZF90IHBpZDsKICAgIGludCBpID0gMDsKICAgIGludCByZXR1cm5fdmFsOyAvL3dlJ3JlIG5vdCBnb2luZyB0byB1c2UgdGhpcywgYnV0IG5lZWQgaXQgdG8gY2FsbCBzaWd3YWl0KCkKCiAgICBzaWdzZXRfdCBzZXQ7CiAgICBzaWdmaWxsc2V0KCZzZXQpOwogICAgc2lncHJvY21hc2soU0lHX0JMT0NLLCAmc2V0LCBOVUxMKTsKCiAgICBwYXJlbnRfcGlkID0gZ2V0cGlkKCk7CiAgICBmcHJpbnRmKHN0ZGVyciwiSSBhbSBtYWluIHByb2Nlc3MsIGhlcmUgY29tZXMgbXkgcGlkICV1XG4iLGdldHBpZCgpKTsKCiAgICBpZiAoMD5waXBlKF9waXBlKSkgZnByaW50ZihzdGRlcnIsIkVycm9yIHdoZW4gY3JlYXRpbmcgcGlwZSIpOwoKICAgIC8vU3RhcnQgY3JlYXRpbmcgY2hpbGQgcHJvY2Vzc2VzCiAgICB3aGlsZSAoaSA8IE4pewogICAgICAgICAgICBwaWQgPSBmb3JrKCk7CiAgICAgICAgICAgIGlmIChwaWQgPT0gMCl7CiAgICAgICAgICAgICAgICBjbG9zZShfcGlwZVsxXSk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICBlbHNlewogICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwiQ3JlYXRlZCBjaGlsZCB3aXRoIHBpZCAldVxuIixwaWQpOwogICAgICAgICAgICBjaGlsZHJlbltpXSA9IHBpZDsKICAgICAgICAgICAgd3JpdGUoX3BpcGVbMV0sJnBpZCxzaXplb2YocGlkX3QpKTsKICAgICAgICB9CiAgICAgICAgaSA9IGkrMTsKICAgIH0KCiAgICBpID0gMDsKCiAgICAvLyBXaGF0IG1haW4gcHJvY2VzcyBkb2VzCiAgICBpZiAocGlkPjApewogICAgICAgIGNsb3NlKF9waXBlWzBdKTsKICAgICAgICBjbG9zZShfcGlwZVsxXSk7CgogICAgICAgIC8vc2xlZXAoMik7CgogICAgICAgIC8vIE1haW4gcHJvY2VzcyBzZW5kcyBzaWduYWwgdG8gZWFjaCBjaGlsZAogICAgICAgIHdoaWxlKGkgPCBOKXsgICAgICAgICAgIAogICAgICAgICAgICBraWxsKGNoaWxkcmVuW2ldLFNJR1VTUjEpOwogICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwiU2VudCBTSUdVU1IxIHRvIGNoaWxkICV1XG4iLGNoaWxkcmVuW2ldKTsKICAgICAgICAgICAgLy8gLi4gTm93IGp1c3Qgd2FpdCBmb3IgU0lHVVNSMiBhcnJpdmFsCiAgICAgICAgICAgIHNpZ3dhaXQoJnNldCwgJnJldHVybl92YWwpOwoKICAgICAgICAgICAgaSA9IGkrMTsKICAgICAgICB9CiAgICB9CiAgICAvLyBXaGF0IGNoaWxkcmVuIGRvCiAgICBlbHNlewogICAgICAgIC8vIFdhaXQgZm9yIG1haW4gcHJvY2VzcyBTSUdVU1IxIGRlbGl2ZXJ5CiAgICAgICAgc2lnd2FpdCgmc2V0LCAmcmV0dXJuX3ZhbCk7CgogICAgICAgIGZwcmludGYoc3RkZXJyLCAiU0lHVVNSMSBhcnJpdmVkIGNoaWxkICV1IGZyb20gaXRzIGZhdGhlclxuIixnZXRwaWQoKSk7CgogICAgICAgIC8vIE9uY2UgU0lHVVNSMSBoYXMgYXJyaXZlZCwgcGlwZSBpcyByZWFkIE4gdGltZXMKICAgICAgICB3aGlsZSgoaSA8IE4pICYmIChyZWFkKF9waXBlWzBdLCZwaWQsc2l6ZW9mKHBpZF90KSk+MCkpewogICAgICAgICAgICBjaGlsZHJlbltpXSA9IHBpZDsKICAgICAgICAgICAgaSA9IGkrMTsKICAgICAgICB9CiAgICAgICAgY2xvc2UoX3BpcGVbMF0pOwoKICAgICAgICAvLyBBZnRlciByZWFkaW5nIHBpcGUsIGEgcmVwbHkgaXMgc2VudCB0byBwYXJlbnQgcHJvY2VzcwogICAgICAgIGtpbGwocGFyZW50X3BpZCxTSUdVU1IyKTsKICAgIH0KICAgIAogICAgcmV0dXJuIDA7Cn0=
-
upload with new input
-
result: Success time: 0.01s memory: 1716 kB returned value: 0
I am main process, here comes my pid 3851 Created child with pid 3856 Created child with pid 3857 Created child with pid 3858 Created child with pid 3859 Created child with pid 3860 Sent SIGUSR1 to child 3856 SIGUSR1 arrived child 3856 from its father Sent SIGUSR1 to child 3857 SIGUSR1 arrived child 3857 from its father Sent SIGUSR1 to child 3858 SIGUSR1 arrived child 3858 from its father Sent SIGUSR1 to child 3859 SIGUSR1 arrived child 3859 from its father Sent SIGUSR1 to child 3860 SIGUSR1 arrived child 3860 from its father


