小编goo*_*sse的帖子

系统调用如何被信号中断?

我的理解如下:

阻塞系统调通通常会将进程置于'TASK_INTERRUPTIBLE'状态,以便在传递信号时,内核将进程置于'TASK_RUNNING'状态.并且该进程将被安排在下一个计时器滴答发生时运行,以便系统调用被中断.

但我做了一个小测试,它失败了.我转发了一个名为sleep()的usermode进程.我在内核中将进程的状态更改为TASK_RUNNING,但是sleep()根本没有被中断,进程仍处于休眠状态.

然后我尝试了wake_up_process(进程),它失败了.

然后我尝试了set_tsk_thread_flag(进程,TIF_SIGPENDING),它失败了.

然后我尝试了set_tsk_thread_flag(进程,TIF_SIGPENDING)和wake_up_process(进程),成功!! sleep()被中断,进程开始运行.

所以它并不那么简单.有谁知道系统调用究竟是如何被信号中断的?

linux linux-kernel

5
推荐指数
1
解决办法
1032
查看次数

标签 统计

linux ×1

linux-kernel ×1