1 #include <lunaix/spike.h>
3 #include <ulibc/stdio.h>
5 #include <usr/signal.h>
6 #include <usr/sys/lunaix.h>
7 #include <usr/unistd.h>
10 sigchild_handler(int signum)
12 printf("SIGCHLD received\n");
16 sigsegv_handler(int signum)
19 printf("SIGSEGV received on process %d\n", pid);
24 sigalrm_handler(int signum)
27 printf("I, pid %d, have received an alarm!\n", pid);
33 signal(SIGCHLD, sigchild_handler);
34 signal(SIGSEGV, sigsegv_handler);
35 signal(SIGALRM, sigalrm_handler);
42 printf("Child sleep 3s, parent pause.\n");
50 printf("Parent resumed on SIGCHILD\n");
52 for (int i = 0; i < 5; i++) {
54 if (!(pid = fork())) {
55 signal(SIGSEGV, sigsegv_handler);
58 i = *(int*)0xdeadc0de; // seg fault!
63 printf("Forked %d\n", pid);
66 while ((p = wait(&status)) >= 0) {
67 short code = WEXITSTATUS(status);
68 if (WIFSIGNALED(status)) {
69 printf("Process %d terminated by signal, exit_code: %d\n", p, code);
70 } else if (WIFEXITED(status)) {
71 printf("Process %d exited with code %d\n", p, code);
73 printf("Process %d aborted with code %d\n", p, code);