TASK_INTERRUPTIBLE 和TASK_UNINTERRUPTIBLE 的区别

2023年 2月 19日 53点热度 0人点赞 0条评论

TASK_INTERRUPTIBLE 是可以被信号和 wake_up() 唤醒的,当信号到来时,进程会被设置为可运行。而 TASK_UNINTERRUPTIBLE 只能被 wake_up() 唤醒。

信号本质:信号是在软件层次上对中断机制的一种模拟,软中断。

信号来源:信号事件的发生有两个来源:

  • 硬件来源:比如我们按下了键盘或者其它硬件故障;
  • 软件来源:最常用发送信号的系统函数是 kill,raise,alarm 和 setitimer 以及 sigqueue 函数,软件来源还包括一些非法运算等操作。

区分是什么原因唤醒进程,用 signal_pending(current); 检查当前进程是否有信号处理,返回不为 0 表示有信号需要处理,-ERESTARTSYS 表示信号函数处理完毕后重新执行信号函数前的某个系统调用。也就是说,如果信号函数前有发生系统调用,在调度用户信号函数之前,内核会检查系统调用的返回值,看看是不是因为这个信号而中断了系统调用。如果返回值 -ERESTARTSYS,并且当前调度的信号具备 -ERESTARTSYS 属性,系统就会在用户信号函数返回之后再执行该系统调用。

原文地址: TASK_INTERRUPTIBLE 和TASK_UNINTERRUPTIBLE 的区别

本文来自:https://blog.duhbb.com

本文链接地址:TASK_INTERRUPTIBLE 和TASK_UNINTERRUPTIBLE 的区别,英雄不问来路,转载请注明出处,谢谢。

有话想说:那就赶紧去给我留言吧。

rainbow

这个人很懒,什么都没留下

文章评论