fun() {
printf("One");
fork();
printf("Two");
if (fork() == 0) {
printf("Three");
fork();
printf("Four");
}
printf("Five");
}
|---Four---Five---
|
|---Three---|---Four---Five---
|
|---Two---|---Five---
| |---Four---Five---
| |
| |---Three---|---Four---Five---
| |
---One---|---Two---|---Five---
#define N 3
int val = 10;
void handler(sig) {
val += 5;
return;
}
int main() {
pid_t pid;
int i;
signal(SIGCHLD,handler);
for (i=0;i<N;i++) {
if ((pid ==fork()) == 0) {
val -= 3;
exit(0);
}
}
for (i=0;i<N;i++) {
waitpid(-1,NULL,0);
}
printf("val = %d\n",val);
}