3 #include <sys/lunaix.h>
7 sigchild_handler(int signum)
9 printf("SIGCHLD received\n");
13 sigsegv_handler(int signum)
16 printf("SIGSEGV received on process %d\n", pid);
21 sigalrm_handler(int signum)
24 printf("I, pid %d, have received an alarm!\n", pid);
30 signal(SIGCHLD, sigchild_handler);
31 signal(SIGSEGV, sigsegv_handler);
32 signal(SIGALRM, sigalrm_handler);
39 printf("Child sleep 3s, parent pause.\n");
47 printf("Parent resumed on SIGCHILD\n");
49 for (int i = 0; i < 5; i++) {
51 if (!(pid = fork())) {
52 signal(SIGSEGV, sigsegv_handler);
55 i = *(int*)0xdeadc0de; // seg fault!
60 printf("Forked %d\n", pid);
63 while ((p = wait(&status)) >= 0) {
64 short code = WEXITSTATUS(status);
65 if (WIFSIGNALED(status)) {
66 printf("Process %d terminated by signal, exit_code: %d\n", p, code);
67 } else if (WIFEXITED(status)) {
68 printf("Process %d exited with code %d\n", p, code);
70 printf("Process %d aborted with code %d\n", p, code);