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

推广网站推荐网站域名是什

推广网站推荐,网站域名是什,做亚马逊产品测评的网站,房地产建筑公司网站目录 1.进程等待的必要性 2进程等待的方法: 2.1wait方法 2.2waitpid方法 1.3获取子进程status waitpid的使用 1.进程等待的必要性 之前在进程状态章节,我们讲过僵尸进程的危害。僵尸进程无法被杀死,需要通过进程等待来杀掉它&#xff0c…

目录

1.进程等待的必要性

2进程等待的方法:

2.1wait方法

2.2waitpid方法

1.3获取子进程status

waitpid的使用


1.进程等待的必要性

之前在进程状态章节,我们讲过僵尸进程的危害。僵尸进程无法被杀死,需要通过进程等待来杀掉它,进而解决内存泄漏问题

我们通过进程进程等待,获得子进程的退出情况----父进程得知道自己布置给子进程的任务,它完成的怎么样了。

2进程等待的方法:

2.1wait方法

#include<sys/types.h>

#include<sys/wait.h>

pid_t wait(int *status);

返回值:成功返回被等待进程pid,失败返回-1

参数:输出型参数,获取子进程退出状态,不关心则可以设置成为NULL

2.2waitpid方法

pid_t waitpid(pid_t pid, int *status, int options);

返回值:

  当正常返回的时候waitpid返回收集到的子进程的进程ID;

  如果设置了选项WNOHANG,而调用中waitpid发现没有已退出的子进程可收集,则返回0;

  如果调用中出错,则返回-1,这时errno会被设置成相应的值以指示错误所在;

参数:

        pid:
                Pid = -1,等待任一个子进程,与wait等效

                Pid>0,等待其进程id与pid相等的子进程。

        status:
                WIFEXITED(status):若为正常终止子进程返回的状态,则为真。(查看进程是否是正常退出)

                WEXITSTATUS(status):若WIFEXITED非零,提取子进程退出码。(查看进程退出码)

        options:

                WNOHANG:若pid指定的子进程没有结束,则waitpid()函数返回0,不及以等待。若正常结束,则返回该子进程的ID。

  • 如果子进程已经退出,调用wait/waitpid时,wait/waitpid会立即返回,并且释放资源,获得子进程退出信息
  • 如果在任意时刻调用wait/waitpid,子进程存在且正常运行,则进程可能阻塞
  • 如果不存在该子进程,则立即出错返回

1.3获取子进程status

  • wait和waitpid,都有一个status参数,该参数是一个输出型参数,由操作系统填充
  • 如果传递NULL,表示不关心子进程的退出状态信息
  • 否则,操作系统会根据该参数,将子进程的退出信息反馈给父进程
  • status不能简单的当作整型来看待,可以当作位图来看待

WIFEXITED 宏用于检测子进程是否正常退出

  • (status) 的最低八位 (&0xFF) 被检查。
  • 如果这八个比特全为零,则说明子进程是由于调用 exit() 正常结束的。

这意味着,如果子进程因接收到某种致命信号而被迫终止,那么这八个比特不会全部为零,从而使得 WIFEXITED 返回假值。

WEXITSTATUS 的工作原理

一旦确认子进程确实正常退出(即 WIFEXITED(status) 返回真),就可以使用 WEXITSTATUS 来获取实际的退出状态码。其典型定义如下:

这里的关键操作有两点:

  • 将整个 status 右移八位 (>> 8) ,以便丢弃低位上的标志比特;
  • 接着再次与 0xFF 执行按位 AND 操作,确保只保留高位中的有效退出码4

因此,最终的结果是从原始 status 值中抽取出来的真正的退出状态码

#include<sys/types.h>
#include<sys/wait.h>
#include<stdio.h>
#include<stdlib.h>
#include<errno.h>
int main()
{pid_t pid = fork();if(pid == -1){perror("fork");exit(1);}if(pid == 0){sleep(20);exit(10);}else{int st;int ret = wait(&st);//0x7F转成二进制1111 111,因为子进程正常退出st的0-7比特位都是0//我们&0x7F是为了验证子进程是否正常退出if(ret > 0 && (st & 0x7F)==0){printf("child exit code:%d\n",(st>>8)&0xFF);}else if(ret > 0){printf("sig code: %d\n",st&0x7f);}}return 0;
}

如果直接杀掉进程:

waitpid的使用

进程阻塞等待方式:

#include<sys/types.h>
#include<sys/wait.h>
#include<stdio.h>
#include<stdlib.h>
#include<errno.h>int main()
{pid_t pid = fork();if(pid < 0){perror("fork");exit(1);}else if(pid == 0){printf("child is run, pid is : %d\n",getpid());sleep(5);exit(257);}else{int status = 0;pid_t ret = waitpid(-1,&status,0);printf("this is test for wait\n");if(WIFEXITED(status) && ret == pid)printf("wait child 5s success, child return code is :%d\n",WEXITSTATUS(status));else{printf("wait child failed,return\n");return 1;}}return 0;
}

进程的非阻塞等待方式:

#include<sys/types.h>
#include<sys/wait.h>
#include<stdio.h>
#include<stdlib.h>
#include<errno.h>int main()
{pid_t pid = fork();if(pid < 0){perror("fork");exit(1);}else if(pid == 0){printf("child is run, pid is : %d\n",getpid());sleep(5);exit(1);}else{int status = 0;pid_t ret = 0;do{ret = waitpid(-1,&status,WNOHANG);if(ret == 0)printf("child is running\n");sleep(1);} while(ret == 0);if(WIFEXITED(status) && ret == pid)printf("wait child 5s success, child return code is :%d\n",WEXITSTATUS(status));else{printf("wait child failed,return\n");return 1;}}return 0;
}

http://www.dtcms.com/wzjs/805617.html

相关文章:

  • 备案网站有哪些佛山市官网网站建设怎么样
  • 上海3d网站建设深圳网站建设公司哪家专业
  • 热可可怎么做视频网站wordpress路径爆出
  • wordpress手机站h5优化上海 专业网站设计 母婴类
  • 免费云主机试用一年郑州优化网站关键词
  • 搭建网站的网站网站二维码代码
  • 建设部建筑招投标网站wordpress 桌面通知
  • html5 php 网站源码门户网站建设课程设计
  • 网站集约化建设的优势wordpress 微信二维码
  • 中国建设银行网站密码是什么意思网站备案幕布尺寸
  • 网站建设项目明细表家居装修设计平台
  • 河南建设工程造价管理协会网站域名绑定网站
  • 网站绑定别名好吗小语种网站案例
  • 如何将视频添加到网站上wordpress排序插件
  • 淘宝做网站的wordpress多站批量发布
  • 织梦高端html5网站建设工作室网络公司网站模板湖北自适应网站建设报价
  • 付网站建设服务费记账做一个公司官网
  • 泉州建设人才网站去哪个网站可以做写手
  • 可视化网站后台wordpress修改html代码
  • 做网站英语老师的简历wordpress球形标签
  • 摄影摄像网站建设网络营销与直播专业学什么
  • 网站美化的目标适用于手机的网站怎么建设
  • 做网站的是什么职业php中switch做网站
  • js网站特效私域运营软件
  • 设计与绘制一个网站首页中国手机网
  • 中国做趋势的网站网站建设推广关键词
  • 网站充值这么做wordpress怎么禁google
  • 做爰全过程的视频网站wordpress没有安装主题选项卡
  • 建立网站坐等访问者发现千万不能 网站
  • wordpress门户网站模板微商代理网