专业网站的特点,网站建设使用的语言,php 网站管理系统,做课件好用的网站一、进程状态
Linux的进程状态实际上就是 struct task_struct 结构体中的一个变量
1.1状态汇总
其中#xff0c;Linux 状态是用数组储存的#xff0c;如下#xff1a; static const char * const task_state_array[] { R (running), // 0 …一、进程状态
Linux的进程状态实际上就是 struct task_struct 结构体中的一个变量
1.1状态汇总
其中Linux 状态是用数组储存的如下 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 }; R运行状态running : 并不意味着进程一定在运行中它表明进程要么是在运行中要么在运行队列里。 S睡眠状态sleeping): 意味着进程在等待事件完成进程在等待资源就绪。 D磁盘休眠状态Disk sleep有时候也叫不可中断睡眠状态在这个状态的进程通常会等待IO的结束。 T停止状态stopped 可以通过发送 SIGSTOP 信号给进程来停止进程。这个被暂停的进程可以通过发送 SIGCONT 信号让进程继续运行。 X死亡状态dead这个状态只是一个返回状态你不会在任务列表里看到这个状态。 1.2 睡眠状态 我们的 printf 是让代码输出到显示器上而我们的CPU每次从内存中读取数据我们查看实时进程时进程每次都在SLEEP的原因是CPU处理速度太快导致我们每次查看时CPU都已经完成工作等待下一次资源就绪而我们都已经打印数十行却未观察到RUN状态足以说明CPU运行速度之快。
睡眠状态还有一个是 [D] 状态处于D状态下的进程处于深度睡眠不可以被杀不可中断睡眠
1.3暂停状态
记得之前我们聊了 [kill] 命令我们现在来看看 [kill] 中的符号我们先提个别其他部分以后会讲 这里的19号符号 [SIGSTOP] 可以让我们的进程停下来18号符号 [SIGCONT] 可以让暂停的进程重新跑起来。
[kill -19 [pid]] 可以暂停程序我们通过之前的进程信息查询也可以看到进程的 status 处于 T 状态
此时出入代码[kill -18 [pid]] 即可让进程重新启动
其实我们很早就接触过[暂停状态]当我们在VS下调试程序时我们的断点就是让进程进入到了暂停状态。
二、僵尸进程[Z]
2.1概念
僵尸状态Zombies是一个比较特殊的状态。当进程退出并且父进程没有读取到子进程退出的返回代码时就会产生僵尸进程。僵尸进程会以终止状态保持在进程表中并且会一直在等待父进程读取退出状态代码。所以只要子进程退出父进程还在运行但父进程没有读取子进程状态子进程进入Z状态。 我们未来会用 [waitpid] 命令读取僵尸进程使用该命令时僵尸进程就会由 [Z] 状态变为 [X] 状态最后由操作系统释放。
我们之前说过 Linux 下使用的大部分执行操作本质上都是运行进程那我们使用过那么多命令为什么没有产生过僵尸呢 原因是直接在命令行中启动的进程它们的父进程是 bash bash 会自动回收新进程的僵尸。
2.2弊端 1.如果父进程不读取子进程那么子进程就一直处于Z状态 2.Z状态若一直不退出那么储存它的PCB将一直被维护 3.如果父进程创建了很多子进程且不读取子进程那么会造成内存资源浪费和内存泄露 三、孤儿进程
子进程如果先退出而父进程没有进行任何操作那么子进程就会变成僵尸进程。 如果父进程先退出子进程就称之为“孤儿进程”。
为了保证子进程正常被回收孤儿进程一般都会被1号进程(又称 init 进程即OS)所领养。
四、进程优先级
4.1基本概念
cpu资源分配的先后顺序就是指进程的优先权。 优先权高的进程有优先执行权利。 还可以把进程运行到指定的CPU上把不重要的进程安排到某个CPU可以大大改善系统。
4.2查看系统进程
在 linux 系统中用 [ps –l] 命令则会类似输出以下几个内容