网站建设服务合同交印花税,swiper做的网站,大足区城乡建设投资集团网站,江西火电建设公司网站紧接着上篇博客出发#xff0c;我们接着来讲述Linux中进程控制的内容。
目录
1.等待
1.1具体操作
1.等待
进程等待主要的作用在于#xff1a;父进程创建子进程之后#xff0c;等待子进程退出#xff0c;获取子进程的退出码#xff0c;释放子进程的资源#xff0c;避…紧接着上篇博客出发我们接着来讲述Linux中进程控制的内容。
目录
1.等待
1.1具体操作
1.等待
进程等待主要的作用在于父进程创建子进程之后等待子进程退出获取子进程的退出码释放子进程的资源避免僵尸进程的出现。
1.1具体操作
我们来看两个系统调用接口
pid_t wait(int *status);
wait是一个阻塞接口功能是等待当前调用者的任意一个子进程退出获取返回值释放资源。其中status是一个int空间的地址用于向指定空间中存放子进程的推出返回值。值得注意的是wait接口只针对一个子进程不可面向多个。
对于wait的返回值成功则返回处理退出的子进程pid失败则返回-1。
另外阻塞接口的概念第一次出现在本专栏中我们趁机对其进行一个简要的解释。
阻塞接口为了完成一个功能发起了一个调用但该调用完成条件不具备则接口一直等待不返回非阻塞接口为了完成一个功能发起了一个调用但是该调用完成条件不具备则立即返回并报错。
pid_t waitpid(pid_t pid, int *status, int options);
waitpid接口既可以等待任意一个子进程退出也可以等待指定的子进程退出。其中pid参数0-则表示等待指定pid的子进程退出-1-则表示等待任意一个子进程退出。
waitpid接口既可以阻带等待也可以使用非阻塞等待。options参数0-表示默认阻塞等待WNOHANG-设施为非阻塞等待当前没有子进程退出则会报错。
对于waitpid返回值成功则返回处理退出的子进程pid若没有子进程退出则返回0出错返回-1.
对于阻塞操作和非阻塞操作阻塞操作通常流程相较简单但资源利用率也相较低下这是由于阻塞接口等待参数时并不做任何的其他操作仅是等待调用条件完备
而非阻塞操作流程相对复杂但是资源利用率高因为对于非阻塞接口而言我们通常会加入循环操作来对调用条件进行多次判断所以流程相较繁琐但是在调用资源不完备的情况下不会占用资源阻碍其他接口对资源的使用。 我们对wait接口进行一次实践我们可以很清晰的看出阻塞接口的特性即等待调用条件完备在执行若调用条件一直不完备则一直等待。并且对于wait的功能我们也能很明了的看出对于子进程的退出状况。
值得注意的是当程序正常退出时即通过return或exit退出都会设置有相应的退出码但是如果程序时运行中产生异常崩溃则设置的退出码也就没了意义。
所以我们需要对程序的是否异常退出加以控制即我们需要从status中提取判断进程是否正常退出的关键信息和相对应的退出码。
此时我们就需要了解一下status中每一个比特位的具体设置status作为整形数据由32位比特位构成其中高16位我们先不关心对于低16位中的高8位存储的是保存进程退出码接下来1位作为coredump标志位剩余7位是信号异常值。
所以当我们判断进程是否正常退出和如何从status中取出退出码前者可以取status中的低7位信号异常值来判断status 0x7f)后者则取出低16位中的高8位进程退出码(status 8) 0xff 。