- 101 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 05:43:56 ]
- >>21
#include <sys/types.h> #include <sys/wait.h> #include <stdio.h> #include <unistd.h> int main(void) { pid_t c[2], p; int s; switch (c[0] = fork()) { case -1: perror("fork"); break; case 0: execlp("./fork1", "fork1", NULL); perror("fork1"); _exit(1); /* NOTREACHED */ default: break; } switch (c[1] = fork()) { case -1: perror("fork"); break; case 0: execlp("./fork2", "fork2", NULL); perror("fork2"); _exit(1); /* NOTREACHED */ default: break; } while (c[0] != -1 || c[1] != -1) { int i; if ((p=wait(&s)) == -1) { perror("wait"); break; } else for (i = 0; i < 2; i++) if (p==c[i]) { if (WIFEXITED(s)) printf("fork%c exit(%d)\n", i+1, WEXITSTATUS(s)); else if(WIFSIGNALED(s)) printf("fork%c killed(%d)\n", i+1, WTERMSIG(s)); c[i]=-1;break; } if (i==2) {fprintf(stderr, "?\n"); break;}} return 0; }
|

|