当前位置: 首页 > news >正文

合肥网站建设q479185700強万博法务网站建设项目

合肥网站建设q479185700強,万博法务网站建设项目,网站建设论坛首页,校园网站开发方案#x1f4d9; 作者简介 #xff1a;RO-BERRY #x1f4d7; 学习方向#xff1a;致力于C、C、数据结构、TCP/IP、数据库等等一系列知识 #x1f4d2; 日后方向 : 偏向于CPP开发以及大数据方向#xff0c;欢迎各位关注#xff0c;谢谢各位的支持 目录 1.进程排队2.进程状态… 作者简介 RO-BERRY 学习方向致力于C、C、数据结构、TCP/IP、数据库等等一系列知识 日后方向 : 偏向于CPP开发以及大数据方向欢迎各位关注谢谢各位的支持 目录 1.进程排队2.进程状态3.Linux下的进程状态查看状态初遇前台进程和后台进程查看T状态--停止状态查看Z状态--僵尸状态 4.查看进程状态相关的常用命令 1.进程排队 进程 taskk_stuct 可执行程序 进程不是一直在运行的 进程放在cpu上也不会一直运行的 它可能在等待某个软硬件资源 例如,我们写一个scanf函数 #includestdio.h int main() {int a;scanf(%d,a);printf(%d\n,a);return 0; }我们执行了文件但是不输入a的值那么这个进程一直都会存在因为它在等待我们输入数据 那为什么我们在Linux系统里写死循环都不会出现程序挂掉的情况呢 这里我们引入一个概念叫时间片 时间片timeslice又称为“量子quantum”或“处理器片processor slice”是分时操作系统分配给每个正在运行的进程微观上的一段CPU时间在抢占内核中是从进程开始运行直到被抢占的时间。现代操作系统如Windows、Linux、Mac OS X等允许同时运行多个进程 —— 例如你可以在打开音乐播放器听音乐的同时用浏览器浏览网页并下载文件。事实上虽然一台计算机通常可能有多个CPU但是同一个CPU永远不可能真正地同时运行多个任务。在只考虑一个CPU的情况下这些进程“看起来像”同时运行的实则是轮番穿插地运行由于时间片通常很短在Linux上为5ms800ms用户不会感觉到。 时间片由操作系统内核的调度程序分配给每个进程。首先内核会给每个进程分配相等的初始时间片然后每个进程轮番地执行相应的时间当所有进程都处于时间片耗尽的状态时内核会重新为每个进程计算并分配时间片如此往复。 所谓进程排队就是进程在等待一个资源 进程 task_stuct 可执行程序 那么是task_stuct在排队 还是可执行程序在排队呢 例如我们找工作我们向hr投简历hr手里有很多分简历他会从里面挑选出比较好的分出来进行一份一份的查看那么还没有看到我们的简历的过程就属于我们的简历进行排队所以是我们的简历在排队而不是我们本人在排队引入到进程只要是排队一定就是task_stuctPCB在排队 2.进程状态 进程是一个动态的实体所以它是有生命的从创建到消亡是一个进程的整个生命周期。一般有三个状态。 就绪态 进程已经获得所需的其他资源正在申请处理器资源准备开始执行这种情况下称进程处于就绪态 阻塞态休眠态或者等待态进程需要等待所需资源而放弃处理器或者是进程不拥有处理器而且其他资源也没有满足从而即使得到处理器也不能运行的状态 执行态进程得到了处理器并不需要等待其他任何资源正在执行的状态称之为运行态只有在运行态时进程才可以使用所申请的资源 事实上所谓的状态本质是一个整形变量在task_struct中的一个整形变量 #define New 1 //创建状态 #define Ready 2 //就绪状态 #define running 3 //执行状态 #define block 4 //阻塞状态task_struct中中存有一个status整形变量当status为不同整形数值的时候相对应的就是不同的状态 状态决定了什么 状态决定了你的后续动作 例如有人喊你出去玩但是你感冒了所以你状态不好你打算在宿舍躺平休息。 运行状态 在Linux中可能会存在多个进程,都要根据其状态来执行后续动作这个时候就会进行进程排队 一个CPU就会维护一个运行队列大部分电脑都是单CPU当进程放进了CPU的对应运行队列当中那么我们称这个状态就为运行状态 阻塞状态 进程不是一直在运行的,进程放在CPU上也不会一直运行的,它可能在等待某个软硬件资源,前面讲过操作系统管理软硬件程序是先描述再组织对进程也是一样将进程描述成各个结构体对象使用双链表串联起来所以当我们的进程在等待软硬件设施的时候就会从CPU的运行队列转移到我们软硬件资源的等待队列就形成了阻塞状态 当我们的进程在等待软硬件资源的时候资源如果没有就绪我们的进程task_struct只能 1.将自己设置为阻塞状态 2.将自己的PCB连入等待的资源提供的等待队列 结论状态的变迁引起的是PCB会被OS变迁到不同的队列中不同的队列(cpu运行队列磁盘资源等待队列等等)对应着队列里的进程不同的状态 挂起状态 前提计算机资源已经比较吃紧了 挂起就是将进程的代码数据交换到外设当中当需要的时候再换进来也就是一个腾空间的操作这是因为操作系统内存不够容易发生风险如果操作系统挂了就会崩溃 挂起状态Suspended是操作系统中的一种进程状态当一个进程被挂起时它暂时被从内存中移除。 挂起状态通常发生在系统资源有限如内存不足的情况下。此时操作系统会合理地安排内存中的程序有些进程可能会被暂时调离内存。当系统资源变得充足时之前被挂起的进程可以再次被调入内存并恢复到等待执行的就绪状态。挂起状态通常用于以下几种情况 终端用户请求。当用户发现程序运行中存在问题希望暂停程序以便研究或修改时可以将程序挂起。父进程请求。父进程有时希望挂起某个子进程以便对其进行修改或协调子进程间的活动。负荷调节的需要。在实时系统中当工作负荷较重可能会影响对实时任务的控制时系统可能会挂起一些不重要的进程以确保系统正常运行。操作系统的需要。操作系统有时会挂起某些进程以便检查资源使用情况或进行记账。 需要注意的是挂起状态与阻塞状态不同。挂起状态是进程主动选择的一种状态而阻塞状态通常发生在进程等待某些事件如IO操作时。 3.Linux下的进程状态 linux系统中将各种状态进行了重新组织得到了5种状态。 运行态-R正在运行的以及拿到时间片就能运行的(RUNNING)。 正在运行或者在就绪队列中等待运行的进程也就是上面提到的运行态和就绪态的综合一个进程处于RUNNING并不代表他一定在被执行由于在多任务系统中各个就绪进程需要并发执行所以某个特定时刻这些处于RUNNING状态的进程中只有一个能得到处理器而其他进程必须有一个就绪队列中等待即使在多处理器的系统中linux只能同时让一个处理器执行任务 不可中断休眠态-Ddisk IO不可被打断的阻塞状态UNINTERRUPTABLE 处于这种状态的进程正在等待队列中当资源有效时可以由操作系统唤醒通过wake_up()调用唤醒否则一直处于等待状态 可中断休眠态-Sshallow可以被打断的阻塞状态(INTERRUPTABLE) 与不可中断阻塞状态一样处于这种状态的进程在等待队列中当资源有效时可以由操作系统进行唤醒与不可中断阻塞状态区别是处于此状态中的进程也可以被其他进程所唤醒可以被其他进程通过信号来唤醒或者通过操作系统的wake_up()唤醒 停止态-T停止运行(STOPPED) 也就是挂起状态进程被暂停需要通过其它进程的信号才能被唤醒导致这种状态的原因有两个 1.收到相关信号的反应 2.受到父进程ptrace调用的控制而暂时将处理器交给控制进程 僵尸态-Z程序退出后的中间等待处理状态ZOMBIE 表示进程结束但尚未消亡的一种状态此时进程已经结束运行并释放掉大部分资源但尚未释放进程控制块。 僵尸状态是一个比较特殊的状态。当进程退出并且父进程使⽤用wait()系统调⽤没有读取到子进程退出的返回代码时就会产生僵死(尸)进程。僵死进程会以终⽌止状态保持在进程表中并且会一直在等待父进程读取退出状态代码。所以只要子进程退出父进程还在运行但父进程没有读取子进程状态子进程进入Z状态。 状态在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 */ };查看状态 写一个myprocess.c并运行 情况一 可以看到进程在运行但是右边显示处于S状态也就是休眠状态这是为什么 这是因为在Linux操作系统里程序执行print函数是非常快的并且在程序里执行了printf后接上了sleep函数printf函数运行速度是远远快于sleep的相当于可以看成全程在进行休眠状态 情况二 左边程序疯狂进行输出但是状态依然是S休眠状态这又是为什么 printf的本质是向显示器打印我们在xshell上运行时在云服务器上打印运行的但是是在我们的显示器上来打印的这其中是需要访问外设的外设的速度是非常慢的所以我们的程序%95是在等待外设资源的只有很短时间是用来运行的也就是说依然大部分时间处于休眠状态 情况三 终于可以看到进程为R状态了因为这是个死循环 结论 在Linux系统里只有运行进程真正在运行队列里才会视作为运行状态只不过大部分运行进程都会访问外设这是需要花费很大的时间的所以就不会一直在运行队列当中就会显示S状态 初遇前台进程和后台进程 我们普通运行的进程就是前台进程可以看到我们在进程运行的时候输入指令是没有用的并且进程是可以用【CtrlC】结束进程的 我们在运行的可执行程序后面加上 ./myprocess 我们可以看到进程运行过程中输入指令是会打印数据的并且使用热键【CtrlC】是无法结束进程的 这就是后台进程这里的进程状态从S变为S 我们结束后台进程需要使用 kill -9 PID 查看T状态–停止状态 使用指令kill -19 PID—让进程处于暂停状态 也可以使用kill -18 PID—让进程继续运行 这个时候使用【CtrlC】是结束不了进程的 需要使用kill -9 PID 查看Z状态–僵尸状态 myprocess.c 1 #includestdio.h2 #includeunistd.h3 int main()4 {5 pid_t id fork();6 if(id 0)7 {8 //child9 int cnt 5;10 while(cnt)11 {12 printf(I am child, pid: %d,ppid: %d\n,getpid(),getppid()); 13 sleep(1);14 cnt--;15 }16 exit(0); //让子进程直接退出17 }18 //father19 while(1)20 {21 printf(I am father, pid: %d,ppid: %d\n,getpid(),getppid());22 sleep(1);23 }24 }Makefile myprocess:myprocess.cgcc -o $ $^ #-stdc99 .PHONY:clean clean:rm -f myprocess查看进程信息代码 while :;do ps ajx | head -1 ps ajx | grep myprocess | grep -v grep ;sleep 1; done 运行结果: 刚开始两个进程都在跑后来子进程挂掉了父进程一个人在运行右边的进程状态可以看到我们子进程进程状态为z子进程成为了僵尸进程 僵尸进程的危害 进程的退出状态必须被维持下去因为僵尸进程要告诉关心它的进程父进程你交给我的任务我办的怎么样了。可父进程如果⼀直不读取那子进程就⼀直处于Z状态是的维护退出状态本身就是要用数据维护也属于进程基本信息所以保存在task_struct(PCB)中换句话说Z状态⼀直不退出PCB⼀直都要维护是的那⼀个父进程创建了很多子进程就是不回收是不是就会造成内存资源的浪费是的因为数据结构对象本身就要占⽤用内存想想C中定义⼀个结构体变量对象是要在内存的某个位置进行开辟空间内存泄漏?是的 对于上面进程状态需要说明的是 【暂停T和睡眠S的区别sleep做事情了stop没有做事情什么都没做。】 【S为浅度睡眠可唤醒D状态为深度睡眠状态不可强制唤醒。S状态的进程可以被杀死D状态不能被杀死】 既然说到了僵尸进程就不得不提孤儿进程了。 孤儿进程 父进程如果提前退出那么子进程就称之为“孤儿进程” 孤儿进程会被1号init进程领养也就是说会由1号进程进行回收。 父进程退出后为什么没有成为僵尸进程因为父进程的父进程bash会立刻对死掉的父进程进行回收。 #includestdio.h #includeunistd.h #includestdlib.h int main() {pid_t id fork();if(id 0){//childint cnt 500;while(cnt){printf(I am child, pid: %d,ppid: %d\n,getpid(),getppid());sleep(1);cnt--;}exit(0); //让子进程直接退出}int cnt 5;//fatherwhile(cnt){cnt--; //这里让父进程先行结束printf(I am father, pid: %d,ppid: %d\n,getpid(),getppid());sleep(1);} } 父进程先退出但是父进程没有变成僵尸进程 子进程变为孤儿进程父进程PID变为1即被一号进程领养并且变为后台进程使用热键【CtrlC】无法退出 4.查看进程状态相关的常用命令 ps -l 列出与本次登录有关的进程信息 ps -aux 查询内存中进程信息 ps -aux | grep 查询进程的详细信息 top 查看内存中进程的动态信息 kill -9 pid 杀死进程。 PS:显示的进程状态 STAT 列表与上面的3种状态、5种状态不一样 R 运行 Runnable (on run queue) 正在运行或在运行队列中等待 S 睡眠 Sleeping 休眠中, 受阻, 在等待某个条件的形成或接受到信号 I 空闲 Idle Z 僵死 Zombiea defunct process) 进程已终止, 但进程描述符存在, 直到父进程调用wait4()系统调用后释放 D 不可中断 Uninterruptible sleep (ususally IO) 收到信号不唤醒和不可运行, 进程必须等待直到有中断发生 T 终止 Terminate 进程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信号后停止运行运行 P 等待交换页 W 无驻留页 has no resident pages 没有足够的记忆体分页可分配 X 死掉的进程 高优先级进程 高优先序的进程 N 低优先 级进程 低优先序的进程 L 内存锁页 Lock 有记忆体分页分配并缩在记忆体内 s 进程的领导者在它之下有子进程 进程是“位于在前台进程组”也就是进程可以使用键盘输出 l 多线程克隆线程 multi-threaded (using CLONE_THREAD, like NPTL pthreads do) ps -aux ( ps -aux | grep***, 列出***进程的详细信息) USER 进程的所属用户 PID 进程的进程ID号 %CPU 进程占用的 CPU资源 百分比 %MEM 进程占用的 物理内存 百分比 VSZ 进程使用掉的虚拟内存量 (Kbytes) RSS 进程占用的固定的内存量 (Kbytes) TTY 与进程相关联的终端tty),?代表无关,tty1-tty6是本机上面的登入者程序,pts/0表示为由网络连接进主机的程序 STAT 进程的状态具体见前文列出的状态表 START 进程开始创建的时间 TIME 进程使用的总cpu时间 COMMAND : 进程对应的实际程序
http://www.hkea.cn/news/14281036/

相关文章:

  • 网站建设入门 下载wap网站多少钱
  • 宁波网站建设公司代理设计网站页面要多少钱
  • 企业网站推广属于付费推广吗网站开发哪种语言
  • 后台网站模板下载推广平台下载
  • 广东建设项目备案公示网站定制开发app商城系统
  • 网站网站是否需要备案建设银行公积金预约网站
  • 一般门户网站网页游戏排行榜前十推荐
  • 建设银行咸阳交费网站心馨人生珠海网站建设
  • 牡丹江建站天水建设银行网站
  • 建企业网站的步骤怎么跟客户介绍网站建设
  • 建设设计网站公司厦门软件开发工资一般多少
  • 浏览器打开宁波seo营销平台
  • 赣州网站建设培训wordpress 菜单 文章
  • 推进政务服务网站一体化建设建e网3d模型库
  • icp备案查看网站内容吗网站建设基础教程
  • 企业网站色彩沛县专业做网站
  • 网站建设的实验原理和方法怎么做一个网站出来
  • 网站推广软文常用的网络推广平台有哪些呢
  • 怎样做一个网站冠县网站建设多少钱
  • 聊城制作网站免费制作网站平台有哪些
  • 建设高校图书馆网站的意义网站开发公司如何运营
  • 网站开发 密码wordpress左侧插件
  • 全国设计网站公司网站个安装wordpress
  • 上海做网站多少钱网站建设课程报告
  • 宁波seo网站服务安装app
  • 如何做网站的充值功能医疗网站开发ppt
  • 开一个素材设计网站怎么做网站数据分析平台
  • 网站首页没有权重python 爬虫 做网站
  • 网站查询seo个人接做网站多少钱
  • 做静态网站的软件网站开发有哪些方向