如上图,ret_to_user是系统调用、中断、异常触发处理完成后都会调用的函数,调用路径(arm64):
ret_to_user -> work_pending -> do_notify_resume(arch/arm64/kernel/signal.c) -> do_signal -> get_signal、handle_signal -> setup_rt_frame。
setup_rt_frame里面会将注册处理函数压入到用户线程栈上,待返回到用户态,注册函数即被调用执行。
get_signal里面会调用判断信号的关联行为,如果需要结束进程,侧会调用do_group_exit销毁进程关联资源,这时候不会走到handle_signal调用户注册函数;如果信号已被捕获,则返回true,提示需要走handle_signal调用用户注册函数。