title: What is the difference between TASK_KILLABLE and TASK_INTERRUPTIBLE?
body: <p>It seems like TASK_KILLABLE should be a subset of TASK_INTERRUPTIBLE, since killing a task is one way of, um, interrupting it; however, according to sched.h <a href="http://lxr.free-electrons.com/source/include/linux/sched.h#L202" rel="nofollow">here</a> and <a href="http://lxr.free-electrons.com/source/include/linux/sched.h#L223" rel="nofollow">here</a> it looks like TASK_KILLABLE is <strong>UN</strong>INTERRUPTIBLE.</p>
  
  <pre><code>#define TASK_INTERRUPTIBLE      1
  #define TASK_UNINTERRUPTIBLE    2
  #define TASK_WAKEKILL           128
  #define TASK_KILLABLE           (TASK_WAKEKILL | TASK_UNINTERRUPTIBLE)
  </code></pre>
  
  <p>What this really comes down to for me is; when would I want to use <a href="http://lxr.free-electrons.com/source/kernel/sched/completion.c#L208" rel="nofollow">wait_for_completion_interruptible_timeout</a> versus <a href="http://lxr.free-electrons.com/source/kernel/sched/completion.c#L246" rel="nofollow">wait_for_completion_killable_timeout</a>?</p>