【发布时间】:2013-12-16 09:52:54
【问题描述】:
如果系统调用被阻塞,进程状态被设置为TASK_INTERRUPTIBLE,并且进程被从运行队列中移除。
当一个信号被传递给该进程时,内核将该信号添加到待处理信号列表中并将进程状态设置为TASK_RUNNING。
并且当下次调用schedule() 时,将执行此过程。
我不明白的是,阻塞的系统调用究竟是如何将-EINTR 返回到用户空间的?
任何被阻塞的系统调用都可以返回-EINTR?
设置-EINTR的逻辑是信号处理代码还是系统调用本身?
AFAIK 信号处理仅在返回用户空间之前发生,是这样吗?
在上下文切换期间是否发生信号处理?
请帮助我理解这一点。
【问题讨论】:
标签: linux linux-kernel operating-system signals system-calls