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
return 0;
}
-__DEFINE_LXSYSCALL(int, pause)
+void
+__do_pause()
{
__current->flags |= PROC_FINPAUSE;
}
})
__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