未加星标

Linux的进程状态

字体大小 | |
[系统(linux) 所属分类 系统(linux) | 发布者 店小二03 | 时间 2017 | 作者 红领巾 ] 0人收藏点击收藏

=Start=

缘由:

补充一些基础的linux系统知识。

正文: 参考解答: 进程状态

为了弄明白正在运行的进程是什么意思,我们需要知道进程的不同状态。一个进程可以有几个状态(在Linux内核里,进程有时候也叫做任务)。

下面的状态在 fs/proc/array.c 文件里定义:

/* * 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 */不可中断睡眠(通常是在IO操作),收到信号不唤醒和不可运行,进程必须等待直到有中断发生 "T (stopped)",/* 4 */暂停状态,进程收到 SIGSTOP, SIGSTP, SIGTIN, SIGTOU 信号后停止运行 "t (tracing stop)", /* 8 */跟踪状态,指的是进程暂停下来,等待跟踪它的进程对它进行操作 "X (dead)",/* 16 */退出状态,进程即将被销毁 "Z (zombie)",/* 32 */退出状态,进程成为僵尸进程 };

运行状态(running)并不意味着进程一定在运行中,它表明进程要么是在运行中要么在运行队列里。

睡眠状态(sleeping) 意味着进程在等待事件完成(这里的睡眠有时候也叫做可中断睡眠(interruptible sleep))。磁盘休眠状态(disk sleep)有时候也叫不可中断睡眠状态(uninterruptible sleep),在这个状态的进程通常会等待IO的结束。

暂停状态(stopped) 可以通过发送 SIGSTOP 信号给进程来停止进程。这个被暂停的进程可以通过发送 SIGCONT 信号让进程继续运行。

跟踪状态(tracing stop)当进程正在被跟踪时,它处于 TASK_TRACED 这个特殊的状态。“正在被跟踪”指的是进程暂停下来,等待跟踪它的进程对它进行操作。比如在gdb中对被跟踪的进程下一个断点,进程在断点处停下来的时候就处于 TASK_TRACED 状态。而在其他时候,被跟踪的进程还是处于前面提到的那些状态。

死亡状态(dead)是内核运行 kernel/exit.c 里的 do_exit() 函数返回的状态。这个状态只是一个返回状态,你不会在任务列表里看到这个状态。

僵尸状态(zombie) 是一个比较特殊的状态。有些人认为这个状态是在父进程死亡而子进程存活时产生的。实际上不是这样的。父进程可能已经死了但子进程依然存活着,那个子进程的父进程将会成为init进程。当进程退出并且父进程(使用wait()系统调用)没有读取到子进程退出的返回代码时就会产生僵尸进程。僵尸进程会以终止状态保持在进程表中,并且会一直在等待父进程读取退出状态代码。

各种状态之间的转换:


Linux的进程状态
Sources: linusakesson.net, ufsc.br, macdesign.net. 僵尸进程 什么是僵尸进程?

我们知道退出一个进程用系统调用exit,但是这并不意味着该进程马上就消失了,事实上它还留下了一个被称为僵尸进程(Zombie)的数据结构。在Linux进程的5种状态中(R、S、D、T、Z),僵尸进程(Z)是非常特殊的一种,它已经放弃了几乎所有内存空间,没有任何可执行代码,也不能被调度,仅仅在进程列表中保留一个位置,记载该进程的退出状态等信息供其他进程收集,除此之外,僵尸进程不再占有任何内存空间。从这点来看,僵尸进程虽然有一个很酷的名字,但它的影响力远远抵不上那些真正的僵尸兄弟,真正的僵尸总能令人感到恐怖,而僵尸进程却除了留下一些供人凭吊的信息,对系统毫无作用。

为什么会出现僵尸进程? 僵尸进程就是子进程已经结束,但是父进程没有处理的进程! 父进程可以使用 waitpid,wait4 等来处理僵尸进程! 如果父进程不幸在子进程之前“死了”,那么子进程就交由init(pid == 1)进程去管理

即,父进程还没有来得及处理子进程的退出状态等信息,所以才会有僵尸进程的出现。

参考链接: linux上进程状态查询 进程的状态 进程状态 Linux进程状态(ps stat)之R、S、D、T、Z、X #全面细致 linux进程状态查询――ps 操作系统中进程简介
http://blog.jobbole.com/82926/ #全面细致
https://idea.popcount.org/2012-12-11-linux-process-states/ http://stackoverflow.com/questions/1475683/linux-process-states

=END=

本文系统(linux)相关术语:linux系统 鸟哥的linux私房菜 linux命令大全 linux操作系统

分页:12
转载请注明
本文标题:Linux的进程状态
本站链接:http://www.codesec.net/view/520606.html
分享请点击:


1.凡CodeSecTeam转载的文章,均出自其它媒体或其他官网介绍,目的在于传递更多的信息,并不代表本站赞同其观点和其真实性负责;
2.转载的文章仅代表原创作者观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,本站对该文以及其中全部或者部分内容、文字的真实性、完整性、及时性,不作出任何保证或承若;
3.如本站转载稿涉及版权等问题,请作者及时联系本站,我们会及时处理。
登录后可拥有收藏文章、关注作者等权限...
技术大类 技术大类 | 系统(linux) | 评论(0) | 阅读(12)