X-Git-Url: https://scm.lunaixsky.com/lunaix-os.git/blobdiff_plain/1f37d39e678168ffc089bcde6f9ea203c4763550..003db17f7a36a8098827f40df8fedc087b5a26f6:/lunaix-os/kernel/lxinit.c diff --git a/lunaix-os/kernel/lxinit.c b/lunaix-os/kernel/lxinit.c index 8a19841..4744cc1 100644 --- a/lunaix-os/kernel/lxinit.c +++ b/lunaix-os/kernel/lxinit.c @@ -1,12 +1,10 @@ #include #include -#include #include #include #include #include #include -#include #include #include #include @@ -19,27 +17,6 @@ LOG_MODULE("INIT") #define WAIT_DEMO #define IN_USER_MODE -void __USER__ -sigchild_handler(int signum) -{ - kprintf(KINFO "SIGCHLD received\n"); -} - -void __USER__ -sigsegv_handler(int signum) -{ - pid_t pid = getpid(); - kprintf(KWARN "SIGSEGV received on process %d\n", pid); - _exit(signum); -} - -void __USER__ -sigalrm_handler(int signum) -{ - pid_t pid = getpid(); - kprintf(KWARN "I, pid %d, have received an alarm!\n", pid); -} - void __USER__ _lxinit_main() { @@ -53,12 +30,6 @@ _lxinit_main() } #endif - signal(_SIGCHLD, sigchild_handler); - signal(_SIGSEGV, sigsegv_handler); - signal(_SIGALRM, sigalrm_handler); - - alarm(5); - int status; #ifdef WAIT_DEMO // 测试wait @@ -69,7 +40,7 @@ _lxinit_main() kprintf("I am child, I am about to terminated\n"); _exit(1); } - pause(); + wait(&status); pid_t child = wait(&status); kprintf("I am parent, my child (%d) terminated normally with code: %d.\n", child, @@ -89,7 +60,6 @@ _lxinit_main() for (size_t 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! @@ -102,11 +72,7 @@ _lxinit_main() while ((p = wait(&status)) >= 0) { short code = WEXITSTATUS(status); - if (WIFSIGNALED(status)) { - kprintf(KINFO "Process %d terminated by signal, exit_code: %d\n", - p, - code); - } else if (WIFEXITED(status)) { + if (WIFEXITED(status)) { kprintf(KINFO "Process %d exited with code %d\n", p, code); } else { kprintf(KWARN "Process %d aborted with code %d\n", p, code); @@ -120,22 +86,5 @@ _lxinit_main() cpu_get_brand(buf); kprintf("CPU: %s\n\n", buf); - // no lxmalloc here! This can only be used within kernel, but here, we are - // in a dedicated process! any access to kernel method must be done via - // syscall - - struct kdb_keyinfo_pkt keyevent; - while (1) { - if (!kbd_recv_key(&keyevent)) { - yield(); - continue; - } - if ((keyevent.state & KBD_KEY_FPRESSED) && - (keyevent.keycode & 0xff00) <= KEYPAD) { - console_write_char((char)(keyevent.keycode & 0x00ff)); - // FIXME: io to vga port is privileged and cause #GP in user mode - // tty_sync_cursor(); - } - } - spin(); + _exit(0); } \ No newline at end of file