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

品牌自适应网站建设电商网站设计模板

品牌自适应网站建设,电商网站设计模板,公司logo设计免费生成在线制作,欧派全屋定制多少钱一平米什么时候会产生僵尸进程? 僵尸进程(Zombie Process) 产生的条件是: 子进程已经结束(退出),但其父进程尚未调用 wait() 或 waitpid() 来回收它的退出信息(即子进程的退出状态&#x…

什么时候会产生僵尸进程?

僵尸进程(Zombie Process) 产生的条件是:

子进程已经结束(退出),但其父进程尚未调用 wait()waitpid() 来回收它的退出信息(即子进程的退出状态)。

  • 在这种情况下,子进程的进程表项仍保留,以便父进程将来可以获取其退出状态。

  • 这个进程已经“死了”,但还在操作系统中“留个壳子”,这就是“僵尸”。

🔍 具体过程:

  1. 子进程调用 exit() 或正常返回结束;

  2. 内核将其状态设为 ZOMBIE(僵尸);

  3. 等待父进程来调用 wait()waitpid()

  4. 父进程调用 wait() 后,内核清理子进程的 PCB(进程控制块),从而完全释放其资源。

父进程结束会不会结束子进程?

不会。父进程退出时,子进程不会自动结束,而是会被init 进程(PID 1)接管(在 Linux 中)。

这类子进程称为孤儿进程,不会变成僵尸,因为 init 进程会自动为其调用 wait(),避免产生僵尸。

避免僵尸进程的方法

子进程终止时将产生SIGCHLD信号,知道这一点就很容易完成消灭僵尸进程。

  1. 在父进程中使用 signal(SIGCHLD, SIG_IGN);

    • 表示父进程忽略子进程退出信号,内核将自动回收子进程资源,无需显式调用 wait()

  2. 使用 fork() 后立即 wait() 或异步 waitpid() 轮询

 本文章将采用方法1的方式,用信号处理子进程退出信号,并且采用自己设定的信号处理函数而不是SIG_IGN来展示

 基础知识在以下文章,请自行学习:

《Linux C编程实战》笔记:进程操作之创建进程_linux用c代码创建实时进程-CSDN博客

《Linux C编程实战》笔记:进程操作之退出,执行,等待_linux c exec程序-CSDN博客 

《Linux C编程实战》笔记:信号的捕捉和处理_c语言信号捕捉与利用-CSDN博客 

 测试代码如下:

#include <cstdio>
#include <iostream>
#include<sys/types.h>
#include<sys/wait.h>
#include<unistd.h>
#include<signal.h>
void read_childproc(int sig) {//信号处理函数int status;pid_t id = waitpid(-1, &status, WNOHANG);//非阻塞等待子进程结束;-1表示等待任意子进程//判断是否是正常结束的,正常结束WIFEXITED返回非0,进入if语句if (WIFEXITED(status)) {printf("Removed proc id:%d\n", id);printf("Child send:%d\n", WEXITSTATUS(status));//该宏返回子进程的退出状态}
}
int main(int argc,char *argv[])
{pid_t pid;//使用sigaction方法注册信号处理struct sigaction act;act.sa_handler = read_childproc;//信号处理函数sigemptyset(&act.sa_mask);//无屏蔽码act.sa_flags = 0;sigaction(SIGCHLD, &act, 0);pid = fork();//创建子进程if (pid == -1) {//创建失败perror("Process creation failed\n");exit(EXIT_FAILURE);}else if (pid == 0) {//子进程std::cout << "Hi! I'm child process" << std::endl;sleep(10);return 12;//子进程返回值}else {//父进程std::cout << "Child proc id:" << pid << std::endl;pid = fork();//再次创建一个子进程if (pid == -1) {//创建失败perror("Process creation failed\n");exit(EXIT_FAILURE);}else if (pid == 0) {//子进程std::cout << "Hi! I'm child process" << std::endl;sleep(10);exit(24);//子进程返回值}else {//父进程std::cout << "Child proc id:" << pid << std::endl;for (int i = 0; i < 5; i++) {//睡五次五秒。因为发生信号时,父进程会被唤醒,所以暂停时间不到25秒std::cout << "wait..." << std::endl;sleep(5);}}}return 0;
}

运行结果如图:

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

相关文章:

  • 专业性网站 ip谷歌官方网站登录入口
  • 常州市建设项目审批网站长沙百度快速优化排名
  • 高度国际装饰公司官网谷歌seo外包公司哪家好
  • 微信小程序商城制作seo公司多少钱
  • 昆明网站建设-中国互联做网站推广好做吗
  • 自己做轴承网站枸橼酸西地那非片是什么
  • 做自己网站做站长千锋教育培训机构怎么样
  • 全国疫情现状概述福建seo关键词优化外包
  • 一元云够网站建设b2b网站排名
  • post embed wordpress百度快照优化
  • 网络app开发网站建设价格百度一下你就知道啦
  • 武汉平价网站建设七牛云
  • 网站备案需要多久今日最新军事新闻
  • 政务网站设计鉴赏网络营销网站平台有哪些
  • 用什么做网站比较好2024年瘟疫大爆发
  • 网站建设公司推荐谷歌seo网站优化
  • 什么样算网站需要备案佛山市seo推广联系方式
  • 企业建网站的步骤北京网站提升排名
  • 南昌做网站公司培训方案模板
  • 做北京电梯招标的网站企业查询官网
  • 网站建设开票分类编码如何做网站推广
  • 邢台网站开发公司外贸软件排行榜
  • 杭州网站制作模板如何发布一个网站
  • 红色 网站配色杭州市优化服务
  • 自驾黄山旅游攻略seo手机端排名软件
  • node做网站清远今日头条最新消息
  • 北京官方网站网怎样设计一个网页
  • 记的网站域名站长之家app下载
  • 回力网站建设初衷株洲百度seo
  • 临沂百度网站全国网站排名