yihong0618 和朋友们的频道 头像

消息来源频道

yihong0618 和朋友们的频道

@hyi0618

频道8,612 位成员公开可见0 人在线

yihong0618 和朋友们的频道

成员规模8,612 位成员
在线情况0 人在线
消息总数10,129 条消息
浏览量总数3,298,582 次浏览

在这个频道里搜索消息……

t.me/hyi0618

abort(3) 时发生了什么?
1,通过 rt_signal/signal syscall 将 SIGABRT 塞到 current->pending
2,当前线程在合适时机处理信号:处理函数 get_signal()
3,get_signal() 里加标志:current->flags |= PF_SIGNALED;
4,当前线程进行 coredump, do_group_exit, do_exit
5,其它线程并发地也进入到 get_signal()
5,其它线程用 SIGKILL 当做信号
6,直接 do_group_exit, do_exit,然后卡在 do_exit 的 coredump_task_exit 里:
for (;;) {
set_current_state(TASK_UNINTERRUPTIBLE|TASK_FREEZABLE);
if (!self.task) / see coredump_finish() /
break;
schedule();
}
__set_current_state(TASK_RUNNING);
7,一直处于 D 状态
8,如果当前线程 coredump 很慢,其它线程就会被 hung task detector 探测到,然后往 dmesg 里打 log
#abort #coredump #hung_task #signal #exit