ben*_*enf 4 linux linux-kernel
似乎TASK_KILLABLE应该是TASK_INTERRUPTIBLE的一个子集,因为杀死一个任务是一种方式,嗯,打断它; 但是,根据sched.h 这里和这里看起来TASK_KILLABLE是UN INTERRUPTIBLE.
#define TASK_INTERRUPTIBLE      1
#define TASK_UNINTERRUPTIBLE    2
#define TASK_WAKEKILL           128
#define TASK_KILLABLE           (TASK_WAKEKILL | TASK_UNINTERRUPTIBLE)
这真正归结为我的是; 我什么时候想使用wait_for_completion_interruptible_timeout而不是wait_for_completion_killable_timeout?
事实证明,更多的搜索为我解答了这个:在这个有点相关的答案中引用的文章指出:
使用可中断睡眠的内核代码必须始终检查它是否因信号而醒来,如果是,请清理它正在做的事情并将-EINTR返回给用户空间.用户空间方面也必须意识到系统调用被中断并相应地做出响应; 并非所有的用户空间程序员都因这方面的勤奋而闻名.
和
如果应用程序即将被杀死,那么许多关于应用程序错误的问题并不适用.如果所述系统调用注定永远不会返回用户空间,那么开发人员是否考虑过中断系统调用的可能性并不重要.所以马修创造了一种新的睡眠状态,叫做TASK_KILLABLE; 它的行为类似于TASK_UNINTERRUPTIBLE,但致命信号会中断睡眠