博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
OK6410A 开发板 (八) 61 linux-5.11 OK6410A 进程通信机制1 信号
阅读量:4285 次
发布时间:2019-05-27

本文共 1584 字,大约阅读时间需要 5 分钟。

信号	异步通信机制	不可靠/可靠信号处理方式	忽略	// SIGILL 和 SIGSTOP 不可忽略	捕捉	// SIGILL 和 SIGSTOP 不可捕获	默认		// 信号处理对每一个信号有default(不是上面的默认)处理方式	// 而用户可以修改	// 也就是说如果一个信号如果默认为忽略,但是我可以将其改为 捕捉常见信号默认用途	ctrl-c 				SIGINT	终止	除0 				SIGFPE 	终止	无效内存引用			SIGSEGV 终止	网络带外数据到来		SIGURG 	忽略	写一个读终止的管道		SIGPIPE 终止	进程定时器超时 		SIGALAM 终止信号的发送	对一个进程发送一个信号的本质是 把信号挂载到目标进程的信号 pending 队列上去	信号的接收 (不管信号处理方式如何,信号肯定会被接收)	信号真正得到执行的时机是进程执行完异常,返回到用户态的时刻	内核进程是不响应信号的(因为它不会返回到用户态),除非它刻意的去查询

  • send
__send_signal() -> complete_signal() -> signal_wake_up() -> signal_wake_up_state()signal_wake_up_state	if (!wake_up_state(t, state | TASK_INTERRUPTIBLE)) kick_process(t);
  • 用户进程的receive
__irq_usr	ret_to_user_from_irq		slow_work_pending			do_work_pending				do_signal	do_signal	如果是 system call 被信号中断,判断是否需要重启 system call	get_signal() // (2) 从线程的信号 pending 队列中取出信号, // 		dequeue_signal 从信号pending队列中,取出优先级最好的信号		ka = &sighand->action[signr-1]; 从信号处理数组sighand中,取出信号对应的处理函数		ka->sa.sa_handler == SIG_IGN : continue // 忽略		ka->sa.sa_handler != SIG_DFL : break ; // break 返回之后 调用 handle_signal//捕获第一步		其他 // 默认			一部分 sig_kernel_ignore					// SIGCONT SIGCHLD SIGWINCH SIGURG			一部分 sig_kernel_stop					// SIGSTOP SIGTSTP SIGTTIN SIGTTOU			一部分 sig_kernel_coredump->do_coredump	// SIGQUIT SIGILL SIGTRAP SIGABRT SIGFPE SIGSEGV SIGBUS SIGSYS SIGXCPU SIGXFSZ			一部分 do_group_exit	handle_signal() // 有对应的用户自定义处理函数,则执行用户态处理函数 // 捕获第二步		compat_setup_frame // 构造返回堆栈,将返回地址替换为 用户注册的信号处理函数		user_fastforward_single_step // 切换到用户态	重启被中断的system call用户信号执行完毕如何返回?
  • 内核线程 的 receive
if (signal_pending(current))    {
// 自定义信号处理函数 } flush_signals(current);

转载地址:http://rjigi.baihongyu.com/

你可能感兴趣的文章
beego实战笔记
查看>>
提取非行间样式
查看>>
<<go语言实战>>读书笔记
查看>>
makefile的学习
查看>>
ascll和unicode对应的char,wchar_t存储字符
查看>>
vc滚动条 WM_VSCROLL消息16位屏障问题
查看>>
mfc CEdit焦点获取
查看>>
mfc动态按钮
查看>>
vs 获取当前程序文件的路径方法
查看>>
vc 回调函数
查看>>
Marddown学习
查看>>
Mac os中idea使用try catch快捷键
查看>>
无器械健身读后精简
查看>>
狂神说java,html5基础知识讲解全总结
查看>>
Mac idea 替换快捷键
查看>>
CSS3 position sticky固定定位失败的原因
查看>>
狂神说Java CSS3讲解综合代码
查看>>
springboot-mybaits 的mapper文件中使用insert into xx values(xxx) on duplicate key update
查看>>
python-day2 python的基本语法(注释,运算符,数据类型,在python中,定义变量时,不需要指定变量的类型的)
查看>>
Springboot-data-es 自动创建mapping(mapping的数据结构为空)以及自动添加新字段(生成mapping的数据结构)
查看>>