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

品牌网站建设黑白I狼J怎样制作一个自己的网站

品牌网站建设黑白I狼J,怎样制作一个自己的网站,个人响应式网站,廊坊哪里做网站文章目录进程等待进程等待的必要性如何进程等待waiwaitpid验证进程等待 ​ 我们知道fork函数可以创建一个子进程,而子进程通常是替父进程完成一些任务,而父进程在fork之后需要通过wait/waitpid等待子进程退出。这就是进程等待 进程等待的必要性 通过获…

文章目录

  • 进程等待
    • 进程等待的必要性
    • 如何进程等待
      • wai
      • waitpid
    • 验证

进程等待

​ 我们知道fork函数可以创建一个子进程,而子进程通常是替父进程完成一些任务,而父进程在fork之后需要通过wait/waitpid等待子进程退出。这就是进程等待

进程等待的必要性

  • 通过获取子进程退出时的反馈信息,可以知道子进程执行的结果如何、
  • 可以保证时序问题,即先退出子,再退出父
  • 进程退出时会先进入僵尸状态,而僵尸状态不能被kill杀掉还浪费维护成本占用空间但不使用等等危害(内存泄漏),需要通过父进程wait/waitpid释放该子进程的资源

所以进程等待就是,子进程替父进程执行一些任务后结束,父进程要读取子进程执行结束后的反馈的等待,就是进程等待

如何进程等待

这里需要用到如下两个函数

wai

#include <sys/types.h> 
#include <sys/wait.h>
int wait(int *status)
  • 如果成功,wait会返回被收集的子进程的进程ID;
  • 如果调用进程没有子进程,调用就会失败,此时wait返回-1,同时errno被置为ECHILD。

这里只讲waitpid,wait比waitpid简单,会了下面的就会这个了


waitpid

#include <sys/types.h> 
#include <sys/wait.h>
pid_t waitpid(pid_t pid,int *status,int options);
参数(pid)功能
小于 -1等待进程组号为pid绝对值的任何子进程。
等于 -1等待任何子进程,此时的waitpid()函数就退化成了普通的wait()函数。
等于 0等待进程组号与目前进程相同的任何子进程,也就是说任何和调用waitpid()函数的进程在同一个进程组的进程。
大于 0等待进程号为pid的子进程。
参数(status输出型参数) 宏功能
WIFEXITED(status)如果子进程正常结束,它就返回真;否则返回假。
WEXITSTATUS(status)如果WIFEXITED为真,则可以用该宏取得子进程exit()返回的退出码。
WIFSIGNALED(status)如果子进程因为一个未捕获的信号而终止,它就返回真;否则返回假。
WTERMSIG(status)如果WIFSIGNALED为真,则可以用该宏获得导致子进程终止的信号码。
WIFSTOPPED(status)如果当前子进程被暂停了,则返回真;否则返回假。
WSTOPSIG(status)如果WIFSTOPPED为真,则可以使用该宏获得使子进程暂停的信号代码。

status这里只用16个bit位,正常退出时,可以读取到退出码,程序异常只能读取到终止信号

  • wait和waitpid,都有一个status参数,该参数是一个输出型参数,由操作系统填充。

  • 如果传递NULL,表示不关心子进程的退出状态信息。

  • 否则,操作系统会根据该参数,将子进程的退出信息反馈给父进程。

  • status不能简单的当作整形来看待,可以当作位图来看待,具体细节如下图

  • 正常执行代码退出可以收到退出码,而退出信号为0

  • 而代码异常没跑完,可以读取到终止信号,但没有退出码

options参数 :参数options提供了一些另外的选项来控制waitpid()函数的行为。如果不想使用这些选项,则可以把这个参数设为0
一般常用的有两个
WNOHANG :如果pid指定的子进程没有结束,则waitpid()函数立即返回0,而不是阻塞在这个函数上等待;如果结束了,则返回该子进程的进程号。
WUNTRACED:如果子进程进入暂停状态,则马上返回。
waitpid的返回值
当返回正常时,waitpid返回收集到的子进程的进程ID
如果设置了WNOHANG,而调用中waitpid发现自己没有已退出的子进程可收集,则返回0;
如果在调用中出现错误,则返回-1,同时errno会被设置成相应的值来提示错误。

验证

wait

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h>
#include <sys/types.h>void test1()
{pid_t id = fork();if(id == 0){int count = 5;while(count){printf("child run -> %d,child pid:%d \n",count,getpid());sleep(2);count--;}exit(0);}sleep(20);pid_t waitid = wait(NULL);if(waitid > 0){int count = 5;while(count){printf("child success. parent run->%d\n",count);sleep(1);count--;} }elseprintf("waait error\n");
}int main()
{test1();return 0;
}

下面来验证waitpdi

(1)status相关

只需把最上面的代码稍微修改即可,如下图所示:

status是输出型参数,操作系统会去读取退出码和信号

(2)options相关

(WNOHANG| WUNTRACED) 这两个参数的作用是非阻塞等待 (做自己的任务,并每一段时间检查一次)

参数置0则表示阻塞等待 (只做等待这一件事,直到等待结束,才去执行自己的)

从运行状态(队列)的task_struct放到等待队列中就叫做 挂起等待(阻塞),从等待队列放到运行队列被CPU调度就叫做唤醒进程

这里解释为什么命令行的指令能看到退出码:可以理解为命令行执行的指令说就是一个子进程,在bash下的子进程,所以每个指令都看作是一个进程,都有自己的退出码、终止信号
http://www.yayakq.cn/news/26430/

相关文章:

  • 天猫网站建设的意义公司网站如何建设
  • 南昌房产网站建设建设私人网站
  • 一个空间 多个网站服装品牌策划及营销推广方案
  • 阿里云 两个网站学习网站的设置和网页的发布
  • 下载了网站源码wordpress页面瀑布流
  • 做图神器的网站wordpress改成织梦
  • 正规的合肥网站建设网站ip地址大全
  • 深圳网站建设seo推广优化景安一个空间怎么做多个网站
  • 无锡企业网站公司著名食品包装设计的案例
  • 休闲采摘园网站建设泰安网签查询2023
  • 网站建设评比自评情况全国企业信息查询系统登录
  • 网站优化方案模板门户网站建设多久
  • 网站需要证件网上祭奠类网站怎么做
  • 做网站找哪个公司网站建设毕业答辩ppt怎么写
  • 帮人做网站赚钱吗网站产品详情页怎么做
  • 公司网站推广计划书怎么做男女做的羞羞事的网站
  • 做网站公司需要多少钱深圳在线问诊平台
  • 网站建设属于软件开发做海外网站
  • 广东智能网站建设配件黄石网站建设多少钱
  • 可以做哪些网站有哪些内容吗qq在线登陆聊天网页版
  • 做一家网站网页设计做网站首页
  • php网站开发工程师教程兴义市 网站建设
  • 厦门建站服务平面设计类的网站
  • 创建网站用英语怎么说广告联盟全自动赚钱系统
  • 公司网站一般去哪里做网站建设的商品编码
  • 夺宝网站是怎么做推广的简述网站建设的方案
  • 开发网站私活wordpress 页面列表显示
  • 网站建设与网络营销的关系好看的网站哪里找
  • 网站系统建设需要什么资质1920网页设计尺寸规范
  • 汕头个人网站建设slider revolution wordpress