贵州门户网站建设邢台太行中学地址
- 作者: 五速梦信息网
- 时间: 2026年04月20日 11:02
当前位置: 首页 > news >正文
贵州门户网站建设,邢台太行中学地址,最近高清中文在线字幕在线观看,怀化建设网站#x1f57a;作者#xff1a; 主页 我的专栏C语言从0到1探秘C数据结构从0到1探秘Linux菜鸟刷题集 #x1f618;欢迎关注#xff1a;#x1f44d;点赞#x1f64c;收藏✍️留言 #x1f3c7;码字不易#xff0c;你的#x1f44d;点赞#x1f64c;收藏❤️关注对我真的… 作者 主页 我的专栏C语言从0到1探秘C数据结构从0到1探秘Linux菜鸟刷题集 欢迎关注点赞收藏✍️留言 码字不易你的点赞收藏❤️关注对我真的很重要有问题可在评论区提出感谢阅读 文章目录 前言先看看Linux内核源代码怎么说认识进程状态新建阻塞运行挂起终止 进程状态查看命令Linux内核中的进程状态RSDS与D的区别TXZ R/S/T中的是什么意思僵尸进程危害 孤儿进程 后记 前言 前面我们讲述了进程的基本概念以及如何描述、组织、查看进程如何使用fork函数创建子进程等内容本篇将讲述进程的各种状态。 先看看Linux内核源代码怎么说 下面的状态在kernel源代码里的定义 /*
- 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 */
};认识进程状态
在我们讲述Linux内核中的进程状态之前我们先在看一下网上是怎么个样子。
如下
我们依次来解释一下它的含义 新建 新建字面意思就是创建以后还没有进入运行队列如fork后 阻塞 阻塞我们都知道进程的代码数据在内存中但是系统还有其他资源如网卡、磁盘等…所以系统不止有一种队列不同的队列速度不同所以就会有时间差阻塞状态就是CPU等待非CPU资源就绪的状态。 我们来验证一下 比如有下面代码 #includestdio.h int main() {int a 0;scanf(%d,a);return 0; }这个等待输入的状态就是阻塞状态 运行 比如之前讲的task_struct结构在队列中排队就叫做运行态 挂起 和阻塞有点类似但是它的区别是挂起状态会将进程的代码和数据换出到磁盘上而阻塞时的进程代码数据仍在内存。 终止 它是X和Z两种状态的综合体具体之后再讲~ 进程状态查看命令 ps aux / ps axj 命令Linux内核中的进程状态 R R即表示运行态并不意味着进程一定在运行中它表明进程要么是在运行中要么在运行队列里。 测试代码 #include stdio.h #include sys/types.h #include unistd.h int main() {while(1){}return 0; } 运行结果
S 阻塞态意味着进程在等待事件完成这里的睡眠有时候也叫做可中断睡眠interruptible sleep。 我们都知道进程的代码数据在内存中但是系统还有其他资源如网卡、磁盘等…所以系统不止有一种队列不同的队列速度不同所以就会有时间差阻塞状态就是CPU等待非CPU资源就绪的状态。 如下图 这并不是真的S状态为什么这么讲因为你访问了外设一旦访问外设的话这个外设不一定说是立马给你准备好即便是给你准备好了其实你也要有一个让他那么获取你数据的过程。然后其实外设就比较慢要等的话其中你的进程状态大部分都是 s所以你看到当前它的状态就是 s 状态。 D 磁盘休眠状态Disk sleep有时候也叫不可中断睡眠状态uninterruptible sleep它不可被中断、不可被动唤醒在这个状态的进程通常会等待IO的结束。 S与D的区别 它们都是睡眠状态几乎等价但是S是可中断的D不可中断。 那么D的意义是什么 在操作系统中当内存不足时会自动杀死一些不用的进程但是有些进程一旦终止便可能造成数据丢失操作系统就需要知道哪些不能被自动杀死于是在S的基础上就有了D状态。 T 停止状态stopped 可以通过发送 SIGSTOP 信号给进程来停止T进程。这个被暂停的进程可以通过发送 SIGCONT 信号让进程继续运行。 要注意和阻塞态的区别它不用等待资源比如打断点时。 测试断点 上图中的 t 就是暂停状态。 X 死亡状态dead这个状态只是一个返回状态你不会在任务列表里看到这个状态它的作用是供给操作系统回收的因为操作系统不会每时每刻都回收而是过一段时间回收一次来提高效率。 到现在为止我们对进程的概念停留在两个方面 一、必须把自己的可执行程序和代码加载到内存中。 二、操作系统为了管理众多进程它必须给每个进程都创建对应的PCB。 接下来我们来讲解两种特殊的进程僵尸进程和孤儿进程。 Z 僵死状态Zombies是一个比较特殊的状态。当进程退出并且父进程使用wait()系统调用,后面讲没有读取到子进程退出的返回代码时就会产生僵死(尸)进程 僵死进程会以终止状态保持在进程表中并且会一直在等待父进程或者操作系统来进行回收。 只要子进程退出父进程还在运行但父进程没有读取子进程状态子进程进入Z状态 我们可以这样理解它僵尸进程可理解为他们的代码和数据已经被释放掉但PCB没有释放。 eg:假如有一个恶意程序。运行后就是让子进程退出但父进程不回收他这样就会导致僵尸问题让操作系统速度卡顿 验证代码 #include stdio.h #include unistd.h int main() {pid_t pidfork();if(pid0){perror(fork);return 1;}else if(pid0){while(1){printf(I am child,pid:%d,ppid:%d\n,getpid(),getppid());sleep(3);break;}exit(0);}else{while(1){printf(I am father,pid:%d,ppid:%d\n,getpid(),getppid());sleep(1);}}printf(you can see me!\n);return 0; } 运行结果 查看状态 图中的Z就是僵尸状态子进程已退出但父进程还在运行处于等待回收的被检测状态。 R/S/T中的是什么意思 带 为前台任务一旦开始就会占用bash对话框执行命令就没有任何效果了而且可以被Ctrl c 终止。如果要让它在后台运行则使用./mycode [任务号] pid此时bash就看不到它的运行了变成了R状态终止命令kill -9 pid,暂停命令kill -19 pid继续命令kill -18 pid 僵尸进程危害 进程的退出状态必须被维持下去因为他要告诉关心它的进程父进程你交给我的任务我办的怎么样了。 可父进程如果一直不读取那子进程就一直处于Z状态 是的 维护退出状态本身就是要用数据维护也属于进程基本信息所以保存在task_struct(PCB)中 换句话说Z状态一直不退出PCB一直都要维护是的 那一个父进程创建了很多子进程就是不回收是不是就会造成内存资源的浪费 是的因为数据结构对象本身就要占用内存想想C语言中定义一个结构体变量对象是要在内存的某个位置进行开辟空间 是否会内存泄漏?是的比如。 C语言写的程序中malloc后的资源不回收此时导致的僵尸问题就是内存泄漏。 孤儿进程 父进程如果提前退出那么子进程后退出进入Z之后那该如何处理呢 父进程先退出子进程就称之为“孤儿进程” 我们知道子进程一般由父进程回收但是如果是上面这种情况孤儿进程会被1号init进程领养当然要由init进程回收喽。 为什么要被领养 当子进程退出时父进程已不在需要由领养进程来进行回收。 验证一下 #includestdio.h #include unistd.h int main() {pid_t id fork();if(id0){//childwhile(1){}}else{int cnt5;while(cnt){cnt–;sleep(1);}}return 0; }ps axj | head -1 ps ajx | grep mycodeps axj | head -1 ps ajx | grep 2194在一些较新的Linux发行版中引入了–user选项该选项会创建一个用户级的systemd实例用于管理用户级别的服务和进程。 这个用户级的systemd实例的进程ID可能会出现在其他进程的PPID字段中包括孤儿进程。 虽然孤儿进程的父进程通常是1号进程但在这种情况下用户级systemd实例的主进程可能会被记录为孤儿进程的父进程。 后记 本篇从操作系统常见的进程状态来引入到Linux内核中的进程状态他们中的状态有所不同但是其内核是一样的。比如R表示运行态、S表示阻塞态、D表示磁盘休眠态、 T表示暂停状态、X表示死亡状、 G表示相似状态、他们组合起来分别对应的阻塞、运行、挂起、终止这些状态。我们还讲述了在我们查看进程状态时看到的加号是什么意思以及讲述了两种特殊的进程状态僵尸进程和孤儿进程。
- 上一篇: 贵州旅游网站建设策划书51源码之家
- 下一篇: 贵州企业品牌网站建设室内设计平面图素材
相关文章
-
贵州旅游网站建设策划书51源码之家
贵州旅游网站建设策划书51源码之家
- 技术栈
- 2026年04月20日
-
贵州景点网站建设方案搞一个网站要多少钱
贵州景点网站建设方案搞一个网站要多少钱
- 技术栈
- 2026年04月20日
-
贵州建设网老网站庆阳网站建设
贵州建设网老网站庆阳网站建设
- 技术栈
- 2026年04月20日
-
贵州企业品牌网站建设室内设计平面图素材
贵州企业品牌网站建设室内设计平面图素材
- 技术栈
- 2026年04月20日
-
贵州桥梁集团建设有限公司网站六安网站建设六安
贵州桥梁集团建设有限公司网站六安网站建设六安
- 技术栈
- 2026年04月20日
-
贵州省都匀市网站建设乐清公司网站建设
贵州省都匀市网站建设乐清公司网站建设
- 技术栈
- 2026年04月20日
