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

宝山青岛网站建设百度一下百度搜索百度一下

宝山青岛网站建设,百度一下百度搜索百度一下,免费网站提供,中山住房和建设局网站目录 进程状态 三态模型 五态模型 七态模型 Example eg1:阻塞态#xff1a;等待某种资源的过程 eg2:挂起态 Linux内核源代码 Linux进程状态查看 Linux运行状态 R运行状态#xff08;running#xff09;: S睡眠状态#xff08;sleeping)#xff1a; D磁盘休眠状…目录 进程状态 三态模型 五态模型 七态模型 Example eg1:阻塞态等待某种资源的过程 eg2:挂起态 Linux内核源代码 Linux进程状态查看 Linux运行状态 R运行状态running: S睡眠状态sleeping) D磁盘休眠状态Disk sleep T停止状态stopped kill -19 SIGSTO(暂停stop kill -18 SIGCONT(继续continue) kill -9 SIGKIL(kill) X死亡状态dead Z(zombie)-僵尸进程 孤儿进程 进程状态 三态模型 进程状态分为 运行态就绪态阻塞态。 五态模型 进程状态分为 新建态、终止态运行态就绪态阻塞态。 七态模型 进程状态分为 挂起就绪态、挂起等待态、新建态、终止态运行态就绪态阻塞态 Example eg1:阻塞态等待某种资源的过程         操作系统对外设的管理先描述再组织操作系统有对应的结构体对外设进行管理每个管理外设的结构体都有一个等待队列这些结构体对需要访问该外设的进程进行管理而等待的进程就被放入等待队列进而变成阻塞状态当相应的外设进行相关的操作PCB含有全部的属性和数据便会被CPU执行         进程因为等待某种条件就绪而导致的一种不推进的状态——进程卡住了         阻塞——不被调度——一定是因为当前进程需要等待某种资源(磁盘、网卡、显卡等各种外设就绪——一定是进程task_struct结构体需要在某种被OS管理的资源下排队         为什么阻塞进程要通过等待的方式等具体资源被别人用完之后再被自己使用  PCB可以被维护在不同的队列中 资源线性申请 eg2:挂起态 Linux内核源代码 为了弄明白正在运行的进程是什么意思我们需要知道进程的不同状态。一个进程可以有几个状态在 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进程状态查看 ps aux / ps axj      Linux运行状态 R运行状态running: 并不意味着进程一定在运行中它表明进程要么是在运行中要么在运行队列里。 传统意义上新建态、就绪态在Linux中就是R状态 我们来看两段代码 含printf的循环 #include stdio.hint main() {while(1){printf(我在运行吗\n);} }//printf 本质就是向外设打印消息循环打印的过程中外设不会一直处于运行状态所处理的代码在等待队列中CPU执行速度非常快  不含printf的纯循环int main() {while(1){//printf(我在运行吗\n);} }不含printf的纯循环只需要进行判断一个纯计算使用CPU不需要使用外设资源的代码所以就是R状态 S睡眠状态sleeping) 意味着进程在等待事件完成本质是一种阻塞状态 这里的睡眠有时候也叫做可中断睡眠 interruptible sleep。 #include stdio.hint main() {while(1){int a0;scanf(%d\n,a);printf(%d\n,a);//printf(我在运行吗\n);} }等待键盘输入等待键盘资源  D磁盘休眠状态Disk sleep         有时候也叫不可中断睡眠状态uninterruptible sleep在这个状态的进程通常会等待IO的结束。         我们来举个例子假如现在有个进程想向内存写入一个巨大的数据磁盘将这些数据进行储存而该进程等待磁盘工作完成并且在等待队列中等待该进程S休眠此时CPU执行其他的代码。此时操作系统路过看到内存严重不足并且看到该进程尚未执行什么都不做Linux就将其删除当磁盘写完后发现家被偷了为了避免这种情况发生我们保证在某种状态下即便是操作系统该进程在这种状态下也无法被杀死这种状态即为D磁盘休眠状态 T停止状态stopped         可以通过发送 SIGSTOP 信号给进程来停止T进程。这个被暂停的进程可以通过发送 SIGCONT 信号让进程继续运行。 #include stdio.h2 #includeunistd.h3 4 int main() 5 { 6 while(1) 7 { 8 // int a0; 9 // scanf(%d\n,a); 10 // 11 // printf(%d\n,a); 12 // 13 printf(我在运行吗,%d\n,count);14 sleep(1); 15 } 16 }kill -19 SIGSTO(暂停stop kill -18 SIGCONT(继续continue)  但是当我们control C时仍然执行 注control C只能中断在前台运行的代码即我们显示状态的时候后方跟了号的进程由此可以解释之前显示状态的时候为何S后有一个号为了中断进程不论前台或者后台的我们都可以使用kill -9 PID  kill -9 SIGKIL(kill)  t (tracing stop), /* 8 */ 追踪暂停也是暂停的一种断点处停下来本质就是进程暂停 X死亡状态dead         这个状态只是一个返回状态你不会在任务列表里看到这个状态   Z(zombie)-僵尸进程                  僵死状态Zombies是一个比较特殊的状态。当进程退出并且父进程使用wait()系统调用,后面讲没有读取到子进程退出的返回代码时就会产生僵死(尸)进程 僵死进程会以终止状态保持在进程表中并且会一直在等待父进程读取退出状态代码。         所以只要子进程退出父进程还在运行但父进程没有读取子进程状态子进程进入Z状态来维持进程         我们创建进程是为了让进程 帮助我们办事而对于我们操作者而言我们可能关心结果也可能不关心结果当我们是前者的时候我们可以使用printf来查看结果但是需要认为校验结果的准确性我们也可以通过进程退出码来判断如果一个进程退出了立马X状态立马退出有没有机会拿到退出结果Linux当进程退出的时候一般不会立即彻底退出而是要维持一个状态叫做也叫做僵尸状态——方便后续父进程OS读取该子进程退出的退出结果 X (dead), /* 16 */ Z (zombie), /* 32 */ 如何看到僵尸的状态子进程退出但是不要收回子进程 int main() {pid_t id fork();if(id0){//子进程while(1){printf(我是子进程我在运行pid:%d,ppid: %d\n,getpid(),getppid());sleep(1);}}else if(id0){//父进程while(1){printf(我是父进程我在运行pid: %d, ppid: %d\n,getpid(),getppid());sleep(1);}}}我们kill -9 子进程发现变成了Z         维护退出状态本身就是要用数据维护也属于进程基本信息所以保存在task_struct(PCB)中换句话说Z状态一直不退出PCB一直都要维护僵尸状态资源没回收完如果一个父进程创建了很多子进程就是不回收就是不释放会使得内存可用的越来越少因为数据结构对象本身就要占用内存想想C中定义一个结构体变量对象是要在内存的某个位置进行开辟空间不释放涉及内存泄漏等知识 孤儿进程 父进程如果提前退出那么子进程后退出进入Z之后那该如何处理呢 父进程先退出子进程就称之为“孤儿进程” 父进程退出子进程就会被OS自动领养通过让1号进程成为新的父进程。 int main() {pid_t id fork();if(id0){//childwhile(1){printf(我是子进程pid: %d, ppid: %d\n,getpid(),getppid());sleep(1);}}else {//parentint cnt10;while(1){printf(我是父进程pid: %d, ppid: %d\n,getpid(),getppid());sleep(1);if(cnt--0)break;}}return 0; }父进程的僵尸状态未被看见因为其被其父进程即bash回收 32516的爹嘎了之后又给自己找了一个爹PPID为1  为什么领养如果不领养子进程后续再退出无人回收游离的进程多了占据更多的内存空间。        并且我们可以看到领养之前子进程S前台运行领养之后自动由前台变为后台运行如果想杀掉该进程 kill -9 PIDkillall myproc(进程名称
http://www.dnsts.com.cn/news/158016.html

相关文章:

  • 雅虎网站收录提交入口wordpress 插件 无法创建目录
  • 网站重复网龙网络公司游戏
  • 你访问的网站正在建设织梦猫免费模板
  • VPS做镜像网站陕西最新消息今天
  • 模具网站建设网页小游戏在线玩儿
  • 淄博北京网站建设南昌的网站建设公司
  • dw做网站导航条做相册的网站dw
  • 团队建设网站下载app官方正版
  • 怎么自己制作一个网站下载器软件生命周期七个阶段
  • 织梦汽车网站模板免费下载网络推广公司优化客
  • 网页制作网站图片怎么查看网站啥系统做的
  • 定制网站徐州最大网架公司
  • 淄博学校网站建设定制无锡做网站哪家公司好
  • 1号店网站模板下载做网站怎么做鼠标跟随
  • gta5 网站正在建设中定制衣柜设计方案
  • 医院网站可信认证必须做吗营销推广方案
  • 网页游戏排行榜第一名眉山网站优化
  • html网站自带字体怎么做海外服务器租用平台
  • 国外flash网站欣赏外包软件开发
  • asp.net 建立网站大理建设局网站
  • 类似非小号的网站怎么做app导航网站源码
  • 如何让网站上线深圳专业营销网站设计
  • 做网站有弹窗叫什么网站开发图
  • 创建网站服务器地址泉州专业制作网站开发
  • 招财猫网站怎么做wp如何做引擎网站
  • 无锡市住房和城乡建设局网站海会主机做的网站都能干什么的
  • 做网站的地方wordpress淘宝优惠券插件
  • 公司门户网站该怎么做有哪些网站可以免费推广
  • 佛山微信网站设计单页网站 html5 动态
  • 下载了模板如何做网站中国建设住建网站