X-Git-Url: https://scm.lunaixsky.com/lunaix-os.git/blobdiff_plain/c316c28e6c8a165111d6bbc208555f5c53489818..db7fc030e9e04c881f5f12a0e23baa8db4e20ee1:/lunaix-os/kernel/demos/signal_demo.c diff --git a/lunaix-os/kernel/demos/signal_demo.c b/lunaix-os/kernel/demos/signal_demo.c deleted file mode 100644 index 4d7897e..0000000 --- a/lunaix-os/kernel/demos/signal_demo.c +++ /dev/null @@ -1,78 +0,0 @@ -#include - -#include - -#include -#include -#include - -void __USER__ -sigchild_handler(int signum) -{ - printf("SIGCHLD received\n"); -} - -void __USER__ -sigsegv_handler(int signum) -{ - pid_t pid = getpid(); - printf("SIGSEGV received on process %d\n", pid); - _exit(signum); -} - -void __USER__ -sigalrm_handler(int signum) -{ - pid_t pid = getpid(); - printf("I, pid %d, have received an alarm!\n", pid); -} - -void __USER__ -_signal_demo_main() -{ - signal(SIGCHLD, sigchild_handler); - signal(SIGSEGV, sigsegv_handler); - signal(SIGALRM, sigalrm_handler); - - alarm(5); - - int status; - pid_t p = 0; - - printf("Child sleep 3s, parent pause.\n"); - if (!fork()) { - sleep(3); - _exit(0); - } - - pause(); - - printf("Parent resumed on SIGCHILD\n"); - - for (int i = 0; i < 5; i++) { - pid_t pid = 0; - if (!(pid = fork())) { - signal(SIGSEGV, sigsegv_handler); - sleep(i); - if (i == 3) { - i = *(int*)0xdeadc0de; // seg fault! - } - printf("%d\n", i); - _exit(0); - } - printf("Forked %d\n", pid); - } - - while ((p = wait(&status)) >= 0) { - short code = WEXITSTATUS(status); - if (WIFSIGNALED(status)) { - printf("Process %d terminated by signal, exit_code: %d\n", p, code); - } else if (WIFEXITED(status)) { - printf("Process %d exited with code %d\n", p, code); - } else { - printf("Process %d aborted with code %d\n", p, code); - } - } - - printf("done\n"); -} \ No newline at end of file