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

网站建设的培训的感受做企业网站好的

网站建设的培训的感受,做企业网站好的,eclipse模仿网站开发源代码,oa系统官网目录 进程状态 三态模型 五态模型 七态模型 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.hkea.cn/news/14371980/

相关文章:

  • 甘肃网站推广网站meta 优化建议
  • 禅城网站建设联系电话上海建设银行网站莘庄
  • 网站开发示例桂林市建设工程交易中心
  • 什么网站出项目找人做天津网站制作网站
  • 建设工程网站tc太原模板建站软件
  • 实例网站制作教程eclipse 网站开发学习
  • 贵阳网站建设端觉html网站自带字体怎么做
  • php网站开发框架有哪些有专业做网站优化的吗
  • 天津网站建设方案托管企业网站需要备案吗
  • wordpress博客投稿seo课程哪个好
  • 网站seo排名公司长沙app定制开发
  • 资料共享的网站开发帮网站网站做推广被抓会判刑吗
  • 如何选择网站托管公司做企业的网站都要准备什么手续
  • 怎样查网站有没有做CDN加速wordpress 首页单页
  • 河北省建设工程造价管理协会网站织梦网站导航浮动
  • 山东app网站制作网站新闻页面无法翻页
  • 网站开发文档需求撰写word广告设计制作安装合同
  • 知名网站的org域名安徽省建设银行网站
  • 网站建设与维护 pdfwordpress安装上传文件
  • 设计案例的网站做简历的软件免费
  • 网站关键词优化办法做婚恋交友类网站
  • 可以自己做网站做宣传吗wordpress 伪静态 主题失效
  • 东西湖区城乡建设局网站ghost卸载wordpress
  • 南宁做网站龙溪网站建设企业
  • 宝安建设投资集团网站互联网推广招聘
  • c net做的网站深圳市seo推广联系方式
  • 中文域名指向同一个网站怎么把网站设置为主页面
  • 做网站百度收费吗网站建设费是多少
  • 某网站安全建设方案成都代运营公司
  • 做网站广告软件网站双语版的怎么制作