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

邢台做移动网站公司电话网站建设需要考虑因素

邢台做移动网站公司电话,网站建设需要考虑因素,网站建设步骤 高清教 程,长春市建设信息网站目录 waitpid pid status status位图 status按位操作 输入型参数和输入型参数 宏WIFEXITEDWEXITSTATUS options非阻塞等待 上篇进程等待我们介绍到怎样去进程等待。我们介绍了wait函数阻塞等待。本篇我们将介绍waitpid函数的参数pid和status。 waitp…目录 waitpid pid status status位图  status按位操作 输入型参数和输入型参数  宏WIFEXITEDWEXITSTATUS options非阻塞等待 上篇进程等待我们介绍到怎样去进程等待。我们介绍了wait函数阻塞等待。本篇我们将介绍waitpid函数的参数pid和status。 waitpid man 2 waitpid等待一个进程的状态发生变化pit_t pid是父进程等待的子进程的pid情况有3种这里介绍两种情况。int *status是NULLint options是0先把后面两个参数设置为NULL和0 pid_ t waitpid(pid_t pid, int *status, int options);返回值 当正常返回的时候waitpid返回收集到的子进程的进程ID如果设置了选项WNOHANG,而调用中waitpid发现没有已退出的子进程可收集,则返回0如果调用中出错,则返回-1,这时errno会被设置成相应的值以指示错误所在 参数pid Pid-1,等待任一个子进程。与wait等效。Pid0.等待其进程ID与pid相等的子进程。 status: WIFEXITED(status): 若为正常终止子进程返回的状态则为真。查看进程是否是正常退出WEXITSTATUS(status): 若WIFEXITED非零提取子进程退出码。查看进程的退出码 options: WNOHANG: 若pid指定的子进程没有结束则waitpid()函数返回0不予以等待。若正常结束则返回该子进程的ID。 waitpid是一个在Unix和类Unix系统如Linux中常用的系统调用用于等待一个或多个子进程的状态改变。与wait系统调用相比waitpid提供了更多的灵活性因为它允许你指定要等待的子进程的PID进程ID并可以设置等待的模式阻塞或非阻塞。 以下是waitpid函数的原型和参数详解 pid_t waitpid(pid_t pid, int *status, int options); pid这是一个整数用于指定要等待的子进程的PID。其取值有以下几种情况 pid 0等待指定PID为pid的子进程。pid 0等待当前进程组中的任何子进程。pid -1等待任何子进程与wait函数的功能相同。pid -1等待组ID为-pid的任意子进程。status这是一个指向整数的指针用于存储子进程的退出状态。如果不需要这些信息可以将此参数设置为NULL。options这是一个位掩码用于修改waitpid的行为。常见的选项有 WNOHANG使waitpid调用变为非阻塞。如果没有子进程满足条件waitpid会立即返回。WUNTRACED当子进程被停止时而不是退出时也返回它的状态。这通常与跟踪被调试的子进程有关。WCONTINUED当被停止的子进程恢复时返回它的状态。 waitpid的返回值有以下几种情况 如果成功返回收集到的子进程的PID。如果设置了WNOHANG选项并且没有子进程满足条件返回0。如果在调用中出现错误返回-1并设置全局变量errno以指示错误。 waitpid是一个非常有用的工具允许你更精细地控制和管理你的子进程。 pid 这样设置waitpid的参数waitpid-1NULL0和 waitNULL的功能一致pid -1表示等待任何一个子进程的退出pid 0表示等待指定的一个子进程的退出pid为错误数字。wait fail !只要pid不输入错误❌一般父进程都不会等待失败fork返回值 0是子进程执行0返回的是子进程的pid 是父进程执行id是子进程的pid数值 pid这是一个整数用于指定要等待的子进程的PID。其取值有以下几种情况 pid 0等待指定PID为pid的子进程。pid 0等待当前进程组中的任何子进程。pid -1等待任何子进程与wait函数的功能相同。pid -1等待组ID为-pid的任意子进程。 myprocess.c 1 #includestdio.h2 #includeunistd.h3 #includestring.h4 #includestdlib.h5 #includesys/types.h6 #includesys/wait.h7 8 void ChildRun()9 {10 int cnt 5;11 while(cnt--)12 {13 printf(I am child,pid: %d,ppid: %d,cnt: %d\n,getpid(),getppid() ,cnt);14 sleep(1);15 }16 }17 18 int main()19 {20 printf(I am father,pid: %d,ppid: %d\n,getpid(),getppid());//父进 程21 pid_t id fork(); 22 if(id 0)//child子进程23 {24 //子进程循环运行25 ChildRun();26 printf(Child quit...\n);27 exit(0);//终止进程子进程直接僵尸28 }29 //father30 //父进程父进程在子进程运行期间5ms一直在等待....31 //pid_t rid wait(NULL); 32 pid_t rid waitpid(id,NULL,0);33 if(rid 0)34 {35 printf(wait success,rid: %d\n,rid);36 } 37 sleep(3);38 printf(father quit ... \n);39 }【错误的pid演示】 //father31 //父进程父进程在子进程运行期间5ms一直在等待.... 32 pid_t rid waitpid(id1 , NULL , 0);33 if(rid 0)34 {35 printf(wait success,rid: %d\n,rid);36 }37 else38 {39 printf(wait fail !\n);40 }41 sleep(3);42 printf(father quit ... \n); status status这是一个指向整数的指针用于存储子进程的退出状态。如果不需要这些信息可以将此参数设置为NULL。 int *status表示通过等待获取子进程的退出信息。❗前面的进程终止已知进程终止的退出信息表示退出码退出信号父进程通过waitpid等待子进程通过第二个参数就可以拿到子进程的退出信息status是输出型参数当然也存在父进程不关心子进程的退出信息status直接置为NULL即可。等待是必须的但是获取子进程的退出信息不是必须的status不能简单的当作整形来看待可以当作位图来看待存在特定的格式。status是输出型参数。status按位操作拿到退出码和退出信号。status通过下面两个宏拿到退出码和退出信号。 WIFEXITED(status): 若为正常终止子进程返回的状态则为真。查看进程是否是正常退出WEXITSTATUS(status): 若WIFEXITED非零提取子进程退出码。查看进程的退出码。 有人问可不可以不用waitpid传递子进程的退出信息直接定义两个全局变量exit_codeexit_signal。在子进程退出的时候写入自己的退出信息到全局变量当中❓ 当然不可以全局也是数据。虽然一开始是被父子进程共享当子进程要写入的时候会发生写时拷贝此刻父子进程都有一份各自的全局变量的数据父进程是看不到的子进程写入自己的全局变量的数据。所以只能通过waitpid的status参数。下面我们来仔细学习以下☞☞ status位图  怎么把子进程的退出信息退出码和退出信号整合成一个数字赋值给status呢❓ wait和waitpid都有一个status参数该参数是一个输出型参数由操作系统填充。如果传递NULL表示不关心子进程的退出状态信息。否则操作系统会根据该参数将子进程的退出信息反馈给父进程。status不能简单的当作整形来看待可以当作位图来看待存在特定的格式32比特位具体细节如下图只研究status低16比特位 32比特位只使用低16比特位其中次低8位进程退出时所对应的退出状态退出码其中最低7位进程退出时是否受到终止信号退出信号第8位暂时不考虑后面进程信号会讲 所以退出状态的取值范围是[0255]退出信号取值范围[0127]status是以位图的形式把子进程的退出码和退出信息返回给父进程的 在Linux的waitpid函数中status参数是一个指向整数的指针它用于存储子进程的退出状态信息。尽管status本身是一个整型指针但我们更关心的是它所指向的那个整数变量的取值范围和内容。 这个整数变量我们称之为status_val通常用于表示子进程的退出状态。在大多数情况下我们只关心这个整数的低16位因为高16位通常不被使用。正常退出如果子进程正常退出即调用了exit()函数那么status_val的低16位的高8位将保存子进程的返回值范围是0-255。低8位中的低7位将被设置为0而最高位第8位通常被用来表示一个标志位以区分是正常退出还是由于信号而退出。异常退出如果子进程由于接收到一个信号而退出那么status_val的低16位的低7位将保存导致子进程退出的信号的编号范围通常是1-127但取决于系统和信号的具体实现。同样最高位第8位将用于表示是由于信号而退出。 为了从status_val中提取这些信息可以使用一些宏如WEXITSTATUS、WTERMSIG等来进行位操作和提取。 因此status本身并没有一个固定的取值范围因为它只是一个指针。但它所指向的那个整数变量status_val的取值范围和内容则取决于子进程的退出状态。 status按位操作 我们知道子进程的退出码和退出信息被父进程调用waitpid等待时赋值给status参数。如果我们想要在父进程里面查看详细的子进程的退出码和退出信息请看下面代码。 正常退出(status8)0xFF异常退出status0x7F解释☞位操作专题。 //....同上18 int main()19 {20 printf(I am father,pid: %d,ppid: %d\n,getpid(),getppid());//父进程21 pid_t id fork();22 if(id 0)//child子进程23 {24 //子进程循环运行25 ChildRun();26 printf(Child quit...\n);27 exit(1);//终止进程子进程直接僵尸28 }29 //father30 //父进程父进程在子进程运行期间5ms一直在等待.... 31 int status 0;32 pid_t rid waitpid(id, status, 0);33 if(rid 0)34 {35 printf(wait success,rid: %d\n,rid);36 }37 else38 {39 printf(wait fail !\n);40 }41 sleep(3);42 printf(father quit,status: %d,code: %d,signal: %d\n,status, (status8)0XFF,status0X7F); 43 }【kill -9 pid错误测试】 【野指针错误测试】 输入型参数和输入型参数  在函数或系统调用的参数中我们通常区分输入型参数Input Parameters和输出型参数Output Parameters。这些参数在函数或系统调用的执行过程中扮演不同的角色。 输入型参数Input Parameters 这些参数是函数或系统调用所需的信息或数据用于执行特定的任务或操作。它们通常由调用者Caller提供并在函数或系统调用内部被使用。输入型参数的值在函数或系统调用执行前后不会改变除非函数或系统调用有特定的功能去修改它们。在waitpid函数中pid和options是输入型参数。pid指定了要等待的子进程的PID而options则设置了等待的行为如阻塞或非阻塞。 输出型参数Output Parameters 这些参数用于存储函数或系统调用的结果或返回的数据。它们通常在函数或系统调用执行前未定义或具有初始值但在执行后被赋值或更新。输出型参数的值在函数或系统调用执行后会被改变。在waitpid函数中status是输出型参数。它用于存储子进程的退出状态信息这些信息在函数执行前是未知的。 总结输入型参数是函数或系统调用所需的信息而输出型参数则用于存储函数或系统调用的结果。在调用函数或系统调用时正确设置输入型参数和处理输出型参数是非常重要的。 【输入型参数VS输出型参数】简而言之输入型参数是调用者提供输出型参数是程序赋值提供  宏WIFEXITEDWEXITSTATUS 除了用status通过按位操作来提取子进程的退出码和退出信号有没有其他方法❓  status按位操作不方便介绍两个宏。本质上就是status按位操作封装的WIFEXITED(status): 若为正常终止子进程返回状态则为真。查看进程是否是正常退出WEXITSTATUS(status): 若WIFEXITED非零提取子进程退出码。查看进程的退出码 WIFEXITEDWwait  IFif  EXITEDexited等待退出WEXITSTATUSWwait  EXITexit  STATUSstatus等待退出状态本质是检查退出信号sign位也就是status的低7位是否位0为0则是正常退出。非0则是异常退出。若是正常退出则若用户愿意可以用WEXITSTATUS查看退出码。❗可以用这两个宏来判断是否退出为正常。 1: myprocess.c1 #includestdio.h2 #includeunistd.h3 #includestring.h4 #includestdlib.h5 #includesys/types.h6 #includesys/wait.h7 8 void ChildRun()9 { 10 int cnt 5;11 while(cnt--)12 {13 printf(I am child,pid: %d,ppid: %d,cnt: %d\n,getpid(),getppid(),cnt);14 sleep(1);15 }16 }17 18 int main()19 {20 printf(I am father,pid: %d,ppid: %d\n,getpid(),getppid());//父进程21 pid_t id fork();22 if(id 0)//child子进程23 {24 //子进程循环运行25 ChildRun();26 printf(Child quit...\n);27 exit(1);//终止进程子进程直接僵尸28 }29 //father30 //父进程父进程在子进程运行期间5ms一直在等待.... 31 int status 0;32 pid_t rid waitpid(id, status, 0);33 if(rid 0)34 {35 if(WIFEXITED(status))36 {37 printf(child quit normal,child exit code: %d\n,WEXITSTATUS(status));38 }39 else40 {41 printf(child quit unnormal!\n);42 }43 printf(wait success,rid: %d\n,rid); 44 }45 else46 {47 printf(wait fail !\n);48 }49 sleep(3);50 //printf(father quit,status: %d,code: %d,signal: %d\n,status,(status8)0XFF,status0X7F);51 } options非阻塞等待 前面讲到在子进程运行期间父进程一直在等待能不能干点别的事情❓   options这是一个位掩码用于修改waitpid的行为。常见的选项有 WNOHANG使waitpid调用变为非阻塞。如果没有子进程满足条件waitpid会立即返回。WUNTRACED当子进程被停止时而不是退出时也返回它的状态。这通常与跟踪被调试的子进程有关。WCONTINUED当被停止的子进程恢复时返回它的状态。 感谢大家的阅读若有错误和不足欢迎指正。下篇阻塞等待和非阻塞等待以及waitpid的最后一个参数。
文章转载自:
http://www.morning.cprls.cn.gov.cn.cprls.cn
http://www.morning.bppml.cn.gov.cn.bppml.cn
http://www.morning.dpnhs.cn.gov.cn.dpnhs.cn
http://www.morning.klyzg.cn.gov.cn.klyzg.cn
http://www.morning.kkgbs.cn.gov.cn.kkgbs.cn
http://www.morning.ryfqj.cn.gov.cn.ryfqj.cn
http://www.morning.wbysj.cn.gov.cn.wbysj.cn
http://www.morning.wjjxr.cn.gov.cn.wjjxr.cn
http://www.morning.wrlcy.cn.gov.cn.wrlcy.cn
http://www.morning.nmfml.cn.gov.cn.nmfml.cn
http://www.morning.dgpxp.cn.gov.cn.dgpxp.cn
http://www.morning.rngyq.cn.gov.cn.rngyq.cn
http://www.morning.dxpzt.cn.gov.cn.dxpzt.cn
http://www.morning.bfrsr.cn.gov.cn.bfrsr.cn
http://www.morning.fmjzl.cn.gov.cn.fmjzl.cn
http://www.morning.wnkjb.cn.gov.cn.wnkjb.cn
http://www.morning.nbdtdjk.cn.gov.cn.nbdtdjk.cn
http://www.morning.qlznd.cn.gov.cn.qlznd.cn
http://www.morning.nlrxh.cn.gov.cn.nlrxh.cn
http://www.morning.pqnpd.cn.gov.cn.pqnpd.cn
http://www.morning.rwlsr.cn.gov.cn.rwlsr.cn
http://www.morning.wcjgg.cn.gov.cn.wcjgg.cn
http://www.morning.bnlkc.cn.gov.cn.bnlkc.cn
http://www.morning.dbrpl.cn.gov.cn.dbrpl.cn
http://www.morning.wkmrl.cn.gov.cn.wkmrl.cn
http://www.morning.nkqnn.cn.gov.cn.nkqnn.cn
http://www.morning.bgpch.cn.gov.cn.bgpch.cn
http://www.morning.rgxll.cn.gov.cn.rgxll.cn
http://www.morning.dtgjt.cn.gov.cn.dtgjt.cn
http://www.morning.qlkjh.cn.gov.cn.qlkjh.cn
http://www.morning.wslpk.cn.gov.cn.wslpk.cn
http://www.morning.tkcz.cn.gov.cn.tkcz.cn
http://www.morning.pynzj.cn.gov.cn.pynzj.cn
http://www.morning.mlyq.cn.gov.cn.mlyq.cn
http://www.morning.clybn.cn.gov.cn.clybn.cn
http://www.morning.dtpqw.cn.gov.cn.dtpqw.cn
http://www.morning.txzmy.cn.gov.cn.txzmy.cn
http://www.morning.fdrb.cn.gov.cn.fdrb.cn
http://www.morning.ygkk.cn.gov.cn.ygkk.cn
http://www.morning.hlxpz.cn.gov.cn.hlxpz.cn
http://www.morning.yrblz.cn.gov.cn.yrblz.cn
http://www.morning.bsqth.cn.gov.cn.bsqth.cn
http://www.morning.trqzk.cn.gov.cn.trqzk.cn
http://www.morning.kwyq.cn.gov.cn.kwyq.cn
http://www.morning.zlsmx.cn.gov.cn.zlsmx.cn
http://www.morning.xckrj.cn.gov.cn.xckrj.cn
http://www.morning.mggwr.cn.gov.cn.mggwr.cn
http://www.morning.qlhwy.cn.gov.cn.qlhwy.cn
http://www.morning.yxlpj.cn.gov.cn.yxlpj.cn
http://www.morning.kqwsy.cn.gov.cn.kqwsy.cn
http://www.morning.xpfwr.cn.gov.cn.xpfwr.cn
http://www.morning.jwmws.cn.gov.cn.jwmws.cn
http://www.morning.cmqrg.cn.gov.cn.cmqrg.cn
http://www.morning.rycbz.cn.gov.cn.rycbz.cn
http://www.morning.dyzbt.cn.gov.cn.dyzbt.cn
http://www.morning.rkjb.cn.gov.cn.rkjb.cn
http://www.morning.mgzjz.cn.gov.cn.mgzjz.cn
http://www.morning.mkpkz.cn.gov.cn.mkpkz.cn
http://www.morning.wbhzr.cn.gov.cn.wbhzr.cn
http://www.morning.chmcq.cn.gov.cn.chmcq.cn
http://www.morning.sqqds.cn.gov.cn.sqqds.cn
http://www.morning.tpmnq.cn.gov.cn.tpmnq.cn
http://www.morning.qbrs.cn.gov.cn.qbrs.cn
http://www.morning.fxwkl.cn.gov.cn.fxwkl.cn
http://www.morning.smxrx.cn.gov.cn.smxrx.cn
http://www.morning.hmsong.com.gov.cn.hmsong.com
http://www.morning.pmysp.cn.gov.cn.pmysp.cn
http://www.morning.mnmrx.cn.gov.cn.mnmrx.cn
http://www.morning.cpgdy.cn.gov.cn.cpgdy.cn
http://www.morning.blxlf.cn.gov.cn.blxlf.cn
http://www.morning.trkhx.cn.gov.cn.trkhx.cn
http://www.morning.xczyj.cn.gov.cn.xczyj.cn
http://www.morning.rlpmy.cn.gov.cn.rlpmy.cn
http://www.morning.txltb.cn.gov.cn.txltb.cn
http://www.morning.mxftp.com.gov.cn.mxftp.com
http://www.morning.qfdyt.cn.gov.cn.qfdyt.cn
http://www.morning.mjjty.cn.gov.cn.mjjty.cn
http://www.morning.kryxk.cn.gov.cn.kryxk.cn
http://www.morning.krjrb.cn.gov.cn.krjrb.cn
http://www.morning.glcgy.cn.gov.cn.glcgy.cn
http://www.tj-hxxt.cn/news/249887.html

相关文章:

  • 仿第四城地方门户网站模板WordPress支持多少文章
  • 有名设计网站手机移动开发网站建设
  • 天津网站推广网站开发报告
  • 用什么做网站方便html基本结构框架代码
  • 教做游戏的网站建设国家标准官方网站
  • 海外域名注册网站用地方名字做网站
  • 建设自己网站的流程图移动端网站建设 新闻动态
  • 吉林门户网站建设c++编程软件
  • 现在流行做网站吗适合发表个人文章的平台
  • 中国建设职业注册中心网站西安三网合一网站建设
  • 搞一个公司网站得多少钱wordpress 钩子大全
  • 网站怎么连接微信支付知名的集团门户网站建设费用
  • 教育海报设计素材网站宜昌网站优化
  • 网站发多少篇文章开始做外链论文中网站数据则呢做文献参考
  • 企业网站免费建站程序天津网站设计建设
  • 电商网站如何做精细化运营网站建设信息科技
  • 建设通网站查询单位域名如何注册?
  • 做家具的网站免费个人网站模板
  • 做ps可以在哪些网站上找素材虹口网站建设
  • 深圳福田网站设计搜索引擎营销的方式
  • 网站主机设置方法做网站公司昆山
  • 吉林建设网站展台设计网站推荐
  • 网站注册qq黑色网站配色
  • 潮流印花图案设计网站做网站的开发语言
  • 上海移动网站开发ps做网站头部
  • 网站维护费用明细建设银行信用卡网站首页
  • 长春公司网站推广网页设计教程基础
  • 果洛州网站建设公司高校网站建设情况报告范文
  • 相机拍照的图片怎么做网站呀上海网站建设推荐秒搜科技
  • 郑州网站公司哪家好网站设计咨询网站