+ __set_signal(thread, signum);
+}
+
+void
+proc_setsignal(struct proc_info* proc, signum_t signum)
+{
+ if (unlikely(kernel_process(proc))) {
+ return;
+ }
+
+ // FIXME handle signal delivery at process level.
+ switch (signum)
+ {
+ case SIGKILL:
+ signal_terminate_proc(proc, signum);
+ break;
+ case SIGCONT:
+ case SIGSTOP:
+ __set_signal_all_threads(proc, signum);
+ default:
+ break;
+ }
+
+ __set_signal(proc->th_active, signum);
+}
+
+static inline void
+__broadcast_group(struct proc_info* proc, signum_t signum)
+{
+ if (proc_terminated(proc)) {
+ return;
+ }
+
+ struct proc_info *pos, *n;
+ llist_for_each(pos, n, &proc->grp_member, grp_member)
+ {
+ proc_setsignal(pos, signum);
+ }