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

招标网站大全海淀公司网站建设方案

招标网站大全,海淀公司网站建设方案,软件商店最新版下载,英雄联盟世界排名Q#xff1a;父进程为什么要等待子进程退出#xff1f; A#xff1a;回顾创建子进程的目的#xff0c;就是让子进程去处理一些事情#xff0c;那么“事情干完了没有”这件事#xff0c;父进程需要知道并收集子进程的退出状态。子进程的退出状态如果不被收集#xff0c;…Q父进程为什么要等待子进程退出 A回顾创建子进程的目的就是让子进程去处理一些事情那么“事情干完了没有”这件事父进程需要知道并收集子进程的退出状态。子进程的退出状态如果不被收集就会变成僵尸进程。而如果父进程在子进程之前就退出了则此时的子进程会变成孤儿进程。 而父进程会通过下面几个宏来解析具体返回的状态码 僵尸进程 其实上上节的demo2的代码就会产生僵尸进程因为父进程没有收集子进程的退出状态 demo2.c: #include stdio.h #include sys/types.h #include unistd.h #include stdlib.hint main() {pid_t pid;pid_t fork_return;int cnt 0;pid getpid();printf(before fork, PID %d\n,pid);fork_return vfork();if(fork_return 0){while(1){printf(This is the father JC,PID %d\n,getpid());sleep(2);}}else{while(1){printf(This is the son JC,PID %d\n,getpid());sleep(2);cnt;if(cnt 3){exit(-1);}}}return 0; } 运行效果 看起来似乎运行效果很对但如果使用ps -aux|grep zombie查看进程就会发现PID号为3126的子进程已经变成了僵尸进程 “ S ”代表 进程正在正常运行中 “ Z ”代表 僵尸进程 孤儿进程  Linux为了避免系统存在过多孤儿进程init进程收留孤儿进程变成孤儿进程的父进程。 修改demo2.c #include stdio.h #include sys/types.h #include unistd.h #include stdlib.hint main() {pid_t pid;pid_t fork_return;int cnt;pid getpid();printf(before fork, PID %d\n,pid);fork_return fork();if(fork_return 0){printf(This is the father JC,PID %d\n,getpid());}else{while(1){printf(This is the son JC,PID %d, my father JSs PID %d\n,getpid(),getppid());sleep(2);cnt;if(cnt 3){exit(1);}}}return 0; } 运行效果 可见父亲打印一条消息就会去世在去世前子进程的父亲就是原来程序的PID但是当父亲离开后子进程被PID为1797的进程收养了。 通过“ps -aux” 查找1797 但是根据概念子进程不应该被PID号为1的进程收养吗原因看这里 父进程终止子进程未被init收养问题_抱走♡的博客-CSDN博客  所以是Linux的系统版本导致的问题应该 wait相关函数  需要添加的库 #include sys/types.h #include sys/wait.h wait函数原型 pid_t wait(int *wstatus); 参数说明1 wstatus这是一个整数型指针如果设置为“NULL”则表示不关心退出的状态如果不设置为“NULL”则子进程退出的状态会放在这个指针指向的地址中。 waitpid函数原型  waitpid和wait的区别就是wait函数调用后在子进程退出前父进程会被强制阻塞而waitpid中有一个参数可以使得父进程不被阻塞。 pid_t waitpid(pid_t pid, int *wstatus, int options); 参数说明2 pid wstatus这是一个整数型指针如果设置为“NULL”则表示不关心退出的状态如果不设置为“NULL”则子进程退出的状态会放在这个指针指向的地址中。options option如果设置为“WNOHANG”则 若由PID指定的子进程不是立刻可用的则waitpid不阻塞此时其返回值为0 option如果设置为“WUNTRACED”则 若某实现支持作业控制而由PID指定的任一子进程已处于暂停状态并且其状态自暂停以来还未报告过则返回其状态WIFSTOPPED宏确定返回值是否对应于一个暂停子进程 option如果设置为“WCONTINUED”则 若实现支持作业控制那么由PID指定的任一子进程在暂停后已经继续但其状态尚未报告则返回其状态POSIX.1的XSI拓展 父进程等待退出并收集状态的演示 demo3.c: 使用wait函数并将wstatus设置为NULL #include stdio.h #include sys/types.h #include unistd.h #include stdlib.h #include sys/types.h #include sys/wait.hint main() {pid_t pid;pid_t fork_return;int cnt 0;pid getpid();printf(before fork, PID %d\n,pid);fork_return fork();if(fork_return 0){wait(NULL);while(1){printf(This is the father JC,PID %d\n,getpid());sleep(2);}}else{while(1){printf(This is the son JC,PID %d\n,getpid());sleep(2);cnt;if(cnt 3){exit(1);}}}return 0; } 实现效果1 可见虽然使用的是fork函数而不是vfork但是由于父进程调用了wait函数所以在子进程运行时一直阻塞直到子进程退出父进程才开始执行。 使用ps -aux|grep demo3-1查看进程 可见此时PID为3056的子进程已经完全退出所以没有之前出现的僵尸进程了。  使用wait函数并不将wstatus设为NULL #include stdio.h #include sys/types.h #include unistd.h #include stdlib.h #include sys/types.h #include sys/wait.hint main() {pid_t pid;pid_t fork_return;int cnt 0;int status 0;pid getpid();printf(before fork, PID %d\n,pid);fork_return fork();if(fork_return 0){wait(status);printf(child quit, exit status %d\n,WIFEXITED(status));while(1){printf(This is the father JC,PID %d\n,getpid());sleep(2);}}else{while(1){printf(This is the son JC,PID %d\n,getpid());sleep(2);cnt;if(cnt 3){exit(1);}}}return 0; } 注意由于此时的子进程是正常退出则刚刚提到的宏“WIFEXITED”的值为真并且可以使用 “WEXITSTATUS” 来解析状态才可以得到正确的值 实现效果2 可见此时在子进程正常退出后父进程在运行前还得到了子进程退出时的状态码。 使用ps -aux|grep demo3-2查看进程 可见PID号为3109的子进程已经退出 demo4.c 使用waitpid函数并将option设为“WNOHANG” waitpid(fork_return,status,WNOHANG); 回顾刚刚讲的PID参数如果0则等待“进程号等于这个PID”的子进程而之前就说过fork的返回值就是子进程的PID所以在这里直接将第一个参数设置为fork_return 实现效果 可见这次父进程没有阻塞并且直接返回然后父子进程开始抢占CPU等子进程成功执行三次退出之后再次变成只有父进程在执行了。 但是此时使用ps -aux|grep a.out查看进程 可见 PID号为3254的子进程变成了一个僵尸进程 所以父进程的非阻塞等待会造成子进程变成僵尸进程
http://www.pierceye.com/news/725988/

相关文章:

  • 建网站权威公司广告发布平台
  • 自助游网站开发分析报告总结怎么注册公司微信公众号
  • 网站开发公司业务员培训黄聪wordpress
  • 网站规划与建设ppt模板下载响应式网站模板费用
  • 江苏商城网站建设服务网站建设优化石家庄
  • 高师院校语言类课程体系改革与建设 教学成果奖申报网站wordpress 4.8.2 漏洞
  • 以小说名字做网站的小说网wordpress的数据库主机
  • 永嘉高端网站建设价格h5页面制作多少钱
  • 北京网站建设课程培训WordPress分类id在哪
  • 宁夏网站备案青岛专业网站建设公司
  • 廊坊营销网站团队佛山市创意动力信息科技有限公司
  • 怎么学习做网站网络公司 网站建设
  • 网站权重怎么提升网站开发多线程开发
  • wordpress下拉列表沈阳网站排名优化
  • 非自己的网站如何做二次跳转免费建英文网站
  • 广州建筑集团网站企业大型网站开发网站模板设计
  • 漯河网站推广多少钱做调查网站的问卷哪个给的钱高
  • 局域网下怎么访问自己做的网站做网站时如何将前端连接到后台
  • 网页设计与网站建设考试名词解释长治县网站建设
  • 商务网站建设实训报告总结南京太阳宫网站建设
  • 网站建设合同缴纳印花税吗建设企业网站官网登录
  • 石家庄网站开发多少钱做网站和做程序一样吗
  • cpa项目怎么做必须有网站么百度快速收录3元一条
  • 建造网站 备案产品推广文案100字
  • 希腊网站后缀昆山网站推广
  • 企业网站模板seo个人网站制作成品图片
  • 政务网站群建设需求调研表网站优化方案基本流程
  • 那个网站做调查问卷能赚钱架设一个网站
  • 什么网站是免费的合肥网页设计工资一般多少
  • 学校网站建设招聘提高网站浏览量