进程是在 CPU 及内存中运行的程序代码,而每个进程可以创建一个或多个进程(父子进程)。Linux有以下几种进程状态,分别是:
(1)就绪:进程描述符state是TASK_RUNNING,正在运行队列中等待调度器调度。
(2)运行:进程描述符state是TASK_RUNNING,被调度器选中,正在处理器上运行。
(3)轻度睡眠:进程描述符state是TASK_INTERRUPTIBLE,可以被信号打断。
(4)中度睡眠:进程描述符state是TASK_KILLABLE,只能被致命的信号打断。
(5)深度睡眠:进程描述符的字段state是TASK_UNINTERRUPTIBLE,不能被信号打断。
(6)僵尸:进程描述符state是TASKDEAD,字段exit_state是EXIT_ZOMBIE。如果父进程关注子进程退出事件,那么子进程在退出时发送SIGCHLD信号通知父进程,变成僵尸进程,父进程在查询子进程的终止原因后回收子进程的进程描述符。
(7)死亡:进程描述符的字段state是TASK_DEAD,如果父进程不关注子进程退出事件,那么子进程退出时自动消亡。
如图所示:
客户端进程查看脚本为:
下图为centos运行的进程查看图。
Linux对进程状态的代码如下:
- /*
- * 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.
- */
- static const char * const task_state_array[] = {
- "R (running)", /* 0 */
- "S (sleeping)", /* 1 */
- "D (disk sleep)", /* 2 */
- "T (stopped)", /* 4 */
- "t (tracing stop)", /* 8 */
- "X (dead)", /* 16 */
- "Z (zombie)", /* 32 */
- };