X-Git-Url: https://scm.lunaixsky.com/lunaix-os.git/blobdiff_plain/088403ac98acf7991507715d29a282dcba222053..9d62069fd52fa2108b677ffadc7f6138c7641757:/lunaix-os/kernel/lxinit.c diff --git a/lunaix-os/kernel/lxinit.c b/lunaix-os/kernel/lxinit.c index fa8458c..2ac9342 100644 --- a/lunaix-os/kernel/lxinit.c +++ b/lunaix-os/kernel/lxinit.c @@ -15,9 +15,10 @@ extern uint8_t __kernel_start; LOG_MODULE("INIT") // #define FORK_BOMB_DEMO -// #define WAIT_DEMO +#define WAIT_DEMO +#define IN_USER_MODE -void +void __USER__ _lxinit_main() { #ifdef FORK_BOMB_DEMO @@ -40,6 +41,7 @@ _lxinit_main() kprintf("I am child, I am about to terminated\n"); _exit(1); } + wait(&status); pid_t child = wait(&status); kprintf("I am parent, my child (%d) terminated normally with code: %d.\n", child, @@ -49,14 +51,13 @@ _lxinit_main() pid_t p = 0; if (!fork()) { - kprintf("Test no hang!"); - sleep(12); + kprintf("Test no hang!\n"); + sleep(6); _exit(0); } waitpid(-1, &status, WNOHANG); - // 这里是就是LunaixOS的第一个进程了! for (size_t i = 0; i < 5; i++) { pid_t pid = 0; if (!(pid = fork())) { @@ -94,15 +95,15 @@ _lxinit_main() struct kdb_keyinfo_pkt keyevent; while (1) { if (!kbd_recv_key(&keyevent)) { - // yield(); + yield(); continue; } if ((keyevent.state & KBD_KEY_FPRESSED) && (keyevent.keycode & 0xff00) <= KEYPAD) { tty_put_char((char)(keyevent.keycode & 0x00ff)); - tty_sync_cursor(); + // FIXME: io to vga port is privileged and cause #GP in user mode + // tty_sync_cursor(); } } - spin(); } \ No newline at end of file