linux 进程状态

1. 定义


kernel/common/include/linux/sched.h
61 * Task state bitmask. NOTE! These bits are also
62 * encoded in fs/proc/array.c: get_task_state().
63 *
64 * We have two separate sets of flags: task->state
65 * is about runnability, while task->exit_state are
66 * about the task exiting. Confusing, but this way
67 * modifying one set can't modify the other one by
68 * mistake.
69 */
70
71/* Used in tsk->state: */
72#define TASK_RUNNING			0x0000
73#define TASK_INTERRUPTIBLE	0x0001
74#define TASK_UNINTERRUPTIBLE	0x0002
75#define __TASK_STOPPED		0x0004
76#define __TASK_TRACED			0x0008
77/* Used in tsk->exit_state: */
78#define EXIT_DEAD			    0x0010
79#define EXIT_ZOMBIE			0x0020
80#define EXIT_TRACE			(EXIT_ZOMBIE | EXIT_DEAD)
81/* Used in tsk->state again: */
82#define TASK_PARKED			0x0040
83#define TASK_DEAD			    0x0080
84#define TASK_WAKEKILL			0x0100
85#define TASK_WAKING			0x0200
86#define TASK_NOLOAD			0x0400
87#define TASK_NEW			    0x0800
88#define TASK_STATE_MAX	    0x1000

进程描述符中的state字段描述了进程当前所处的状态。它由一组标志组成,其中每个标志描述符一种可能的进程状态。在当前的Linux版本中,这些状态是互斥的,因此,严格意义上说,只能设置一种状态;其余多为标志将被清除。

TASK_RUNNING : 进程处于可运行状态,但并不意味着进程已经实际上已分配到 CPU ,它可能会一直等到调度器选中它。该状态只是确保进程一旦被 CPU 选中时立马可以运行,而无需等待外部事件。

TASK_INTERRUPTIBLE : 这是针对等待某事件或其他资源而睡眠的进程设置的。在内核发送信号给该进程时表明等待的事件已经发生或资源已经可用,进程状态变为 TASK_RUNNING,此时只要被调度器选中就立即可恢复运行。

TASK_UNINTERRUPTIBLE : 处于此状态,不能由外部信号唤醒,只能由内核亲自唤醒。

TASK_STOPPED : 表示进程特意停止运行。比如在调试程序时,进程被调试器暂停下来。

TASK_TRACED : 本来不属于进程状态,用于从停止的进程中,将当前被调试的那些进程与常规进程区分开来。

EXIT_ZOMBIE : 僵尸状态

EXIT_DEAD : 处于该状态, 表示 wait 系统调用已经发出,而进程完全从系统移除之前的状态。只有多个线程对同一个进程发出 wait 调用时,该状态才有意义(为了防止其他执行线程在同一个进程也执行wait()类系统调用,而把进程的状态由僵死状态(EXIT_ZOMBIE)改为撤销状态(EXIT_DEAD)

2. set_current_state 


kernel/common/include/linux/sched.h

132#define set_current_state(state_value)				\
133	do {							\
134		WARN_ON_ONCE(is_special_task_state(state_value));\
135		current->task_state_change = _THIS_IP_;		\
136		smp_store_mb(current->state, (state_value));	\
137	} while (0)

set_current_state() 来设置进程的状态,设置的状态为 TASK_RUNNING、TASK_INTERRUPTIBLE 、TASK_UNINTERRUTIBLE 等进程状态

你可能感兴趣的:(Linux,学习,linux)