TASK_RUNNING
- task is running on a cpu or awaiting execution
TASK_INTERRUPTABLE
- task is sleeping but can be awoken by an interrupt
TASK_UNINTERRUPTABLE
- tasks is sleeping - any interrupt delivered to it will not change it’s state
- more details here, TLDR:
- some syscalls, (eg.
read()) is interruptible - it takes a long time (seconds); when it receives SIGTERM, the syscall exits prematurely → this early return enables the user space code to immediately respond to the signal - some syscalls cannot be interrupted this way - if the syscall stalls for some reason, the process can indefinitely remain in this unkillable state
- some syscalls, (eg.
__TASK_STOPPED
- task is stopped
__TASK_TRACED
- task is stopped by a debugger
