structtask_struct { #ifdef CONFIG_THREAD_INFO_IN_TASK /* * For reasons of header soup (see current_thread_info()), this * must be the first element of task_struct. */ structthread_infothread_info; #endif /* -1 unrunnable, 0 runnable, >0 stopped: */ volatilelong state; int exit_state; int exit_code; int exit_signal;
/* * This begins the randomizable portion of task_struct. Only * scheduling-critical items should be added above here. */ randomized_struct_fields_start
void *stack; refcount_t usage; /* Per task flags (PF_*), defined further below: */ unsignedint flags; unsignedint ptrace;
/* * Task state bitmask. NOTE! These bits are also * encoded in fs/proc/array.c: get_task_state(). * * We have two separate sets of flags: task->state * is about runnability, while task->exit_state are * about the task exiting. Confusing, but this way * modifying one set can't modify the other one by * mistake. */
/* * The task state array is a strange "bitmap" of * reasons to sleep. Thus "running" is zero, and * you can test for combinations of others with * simple bit tests. */ staticconstchar * const task_state_array[] = {
PROCESS STATE CODES Here are the different values that the s, stat and state output specifiers(header "STAT" or "S") will display to describe the state of a process:
D uninterruptible sleep(usually IO) I Idle kernel thread R running or runnable(on run queue) S interruptible sleep(waiting for an event to complete) T stopped by job control signal t stopped by debugger during the tracing W paging(not valid since the 2.6.xx kernel) X dead(should never be seen) Z defunct("zombie") process, terminated but not reaped by its parent
For BSD formats and when the stat keyword is used, additional characters may be displayed:
< high-priority(not nice to other users) N low-priority(nice to other users) L has pages locked into memory(for real-time and custom IO) s is a session leader l is multi-threaded(using CLONE_THREAD, like NPTL pthreads do) + is in the foreground process group