void
do_group_exit(int exit_code)
{
struct signal_struct *sig = current->signal;
if (signal_group_exit(sig))
exit_code = sig->group_exit_code;
else if (!thread_group_empty(current)) {
struct sighand_struct *const sighand = current->sighand;
spin_lock_irq(&sighand->siglock);
if (signal_group_exit(sig))
/* Another thread got here before we took the lock. */
exit_code = sig->group_exit_code;
else {
sig->group_exit_code = exit_code;
sig->flags = SIGNAL_GROUP_EXIT;
zap_other_threads(current);
}
spin_unlock_irq(&sighand->siglock);
}
do_exit(exit_code);
}
进程调度之5:系统调用exit与wait4
https://my.oschina.net/u/3857782/blog/1857551
Linux进程退出详解(do_exit)--Linux进程的管理与调度(十四))
https://kernel.blog.csdn.net/article/details/51638706