Linux因此推出了一个特殊的深度睡眠状态,叫做 TASK_KILLABLE(可杀的深度睡眠):可以被等到的资源唤醒,不能被常规信号唤醒,但是可以被致命信号唤醒。 TASK_KILLABLE状态的定义是: #define TASK_KILLABLE (TASK_WAKEKILL | TASK_UNINTERRUPTIBLE) 所以它显然是属于TASK_UNINTERRUPTIBLE的,只是可以被TASK_WAKEKILL。 什么叫...
TASK_KILLABLE进程状态是因为 David Howells 于 2002 年提出的一个问题而诞生的;他发现 OpenAFS 文件系统驱动程序在阻塞所有可中断信号时会等待某个事件, 而它们实际上应该在TASK_UNINTERRUPTIBLE状态中等待。 Jonathan Corbet 就TASK_KILLABLE(LWN.net,2008 年 7 月)展开的讨论是非常有用的入门信息。 “Kernel Korne...
TASK_KILLABLE:Linux 中的新进程状态Avinesh Kumar
TASK_KILLABLE进程状态是因为 David Howells 于 2002 年提出的一个问题而诞生的;他发现 OpenAFS 文件系统驱动程序在阻塞所有可中断信号时会等待某个事件, 而它们实际上应该在TASK_UNINTERRUPTIBLE状态中等待。 Jonathan Corbet 就TASK_KILLABLE(LWN.net,2008 年 7 月)展开的讨论是非常有用的入门信息。 “Kernel Korne...
long schedule_timeout_killable(signed long timeout); 该函数定义在 kernel/timer.c 中;该例程主要用于将当前任务的状态设置为TASK_KILLABLE并调用schedule_timeout(),它用于让调用任务睡眠timeout个jiffies。(在 UNIX 系统中,jiffy主要表示两个连续时钟计时单元之间的时间。
新的睡眠状态允许 TASK_UNINTERRUPTIBLE 响应致命信号 Linux kernel 2.6.25 引入了一种新的进程状态,名为TASK_KILLABLE,用于将进程置为睡眠状态,它可以替代有效但可能无法终止的TASK_UNINTERRUPTIBLE进程状态,以及易于唤醒但更加安全的TASK_INTERRUPTIBLE进程状态。2002 年,OpenAFS 文件系统驱动程序在阻塞所有信号之后等待事件...
TASK_KILLABLE 对不可中断睡眠模式的进程的唤醒呼叫可能会由于某些原因不会发生,这会使进程无法被终止,从而最终引发问题,因为惟一的解决方法 就是重启系统。一方面,您需要考虑一些细节,因为不这样做会在内核端和用户端引入 bug。另一方面,您可能会生成永远不会停止的进 ...
TASK_KILLABLE: New process state in LinuxAvinesh KumarKumar, A.: TASK_KILLABLE: New process state in Linux. IBM (2008).Kumar, A.: TASK_KILLABLE: New process state in Linux. IBM (2008)
the process or not. But in addition to these "should I continue and/or count exclusive waiters", wake functions can _do_ things too. The common one is "autoremove", which is basically "if you actually woke something up, then remove it from the list" (so that one generally goes along...
>> wait_on_page_bit_common(wait_queue_head_t *q, >> for (;;) { >> spin_lock_irq(&q->lock); >> >> + if (signal_pending_state(state, current)) { >> + /* Must not lose an exclusive wake up, see >> + * prepare_to_wait_event comment */ ...