X-Git-Url: https://scm.lunaixsky.com/lunaix-os.git/blobdiff_plain/620a2ee90a60979955c318cc1b37741184137bd6..874b3b5a74d815aa91f325e5573052a3c8ce1d39:/lunaix-os/kernel/signal.c diff --git a/lunaix-os/kernel/signal.c b/lunaix-os/kernel/signal.c index 19deff2..de83438 100644 --- a/lunaix-os/kernel/signal.c +++ b/lunaix-os/kernel/signal.c @@ -17,9 +17,9 @@ default_sighandler_term(int signum) void* default_handlers[_SIG_NUM] = { // TODO: 添加默认handler + [_SIGINT] = default_sighandler_term, [_SIGTERM] = default_sighandler_term, + [_SIGKILL] = default_sighandler_term, [_SIGSEGV] = default_sighandler_term, [_SIGINT] = default_sighandler_term, - [_SIGTERM] = default_sighandler_term, - [_SIGKILL] = default_sighandler_term, }; // Referenced in kernel/asm/x86/interrupt.S @@ -160,7 +160,8 @@ __DEFINE_LXSYSCALL2(int, signal, int, signum, sighandler_t, handler) return 0; } -__DEFINE_LXSYSCALL(int, pause) +void +__do_pause() { __current->flags |= PROC_FINPAUSE; @@ -170,10 +171,30 @@ __DEFINE_LXSYSCALL(int, pause) } }) __current->k_status = EINTR; +} + +__DEFINE_LXSYSCALL(int, pause) +{ + __do_pause(); return -1; } __DEFINE_LXSYSCALL2(int, kill, pid_t, pid, int, signum) { return signal_send(pid, signum); +} + +__DEFINE_LXSYSCALL1(int, sigpending, sigset_t, *sigset) +{ + *sigset = __current->sig_pending; + return 0; +} + +__DEFINE_LXSYSCALL1(int, sigsuspend, sigset_t, *mask) +{ + sigset_t tmp = __current->sig_mask; + __current->sig_mask = (*mask) & ~_SIGNAL_UNMASKABLE; + __do_pause(); + __current->sig_mask = tmp; + return -1; } \ No newline at end of file