僵尸进程的产生和SIGCHLD信号

核心句子

子进程在终止时会给父进程发SIGCHLD信号,该信号的默认处理动作是忽略,父进程可以自 定义SIGCHLD信号的处理函数。

僵尸进程的产生:

#include "head.h"
#include <unistd.h>
#include <signal.h>int main()
{key_t key = ftok(".",1);pid_t pid = fork();if( pid > 0){while(1){printf("I am  father\n");sleep(1);}}else if(pid == 0)printf("I am child\n");elseperror("fork()");
}

这里写图片描述
优先选择#ps -lA | grep a.out

这里写图片描述

SIGCHLD建立信号处理程序

当SIGCHLD信号正在处理一个终止的子进程时,如果有两个子进程同时终止,那么就产生了两个SIGCHLD信号,父进程只可以捕获一个。

结果是父进程的SIGCHLD信号处理程序每次只调用一次wait()。这样就一定会产生僵尸进程

使用for循环产生10个子进程,十个子进程都是僵尸进程

#include "head.h"
#include <unistd.h>
#include <signal.h>int handler(int s)
{wait();
}int main()
{key_t key = ftok(".",1);signal(SIGCHLD,handler);int i ;for(i = 0;i<10;i++){pid_t pid = fork();if (pid == 0){printf("i am child\n");sleep(1);exit(0);}else if(pid < 0)perror("fork():");}while(1){printf("让程序在这里死循环,然后观察后台进程\n");sleep(1);}
}

产生了七个僵尸进程,SIGCHLD只处理掉了三个

这里写图片描述

处理方案

int handler(int s)
{while(waitpid(-1,NULL,WNOHANG) > 0){continue; }
}

这里写图片描述

关于waitpid () 和 wait()的解释请看下一篇博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/382765.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

windows 通过批处理 修改环境变量

echo off setlocal enabledelayedexpansion set remain%path% ::待查找字符串 set toAddD:\ffmpeg2\ffmpeg-4.1.3-win64-shared\bin ::标记,默认没有重复 set findedfalse :loop for /f "tokens1* delims;" %%a in ("%remain%") do (::如果找到相同的了if…

海量数据处理--位图(BitMap)

对于海量数据这个词&#xff0c;大家不难理解吧。主要是针对给定的数据量特别大&#xff0c;占用内存特别大的情况。那么和位图有什么关系呢。看下面一个腾讯的海量数据的例子吧。 例&#xff1a;给40亿个不重复的无符号整数&#xff0c;没排过序。给一个无符号整数&#xff0…

ps命令与top命令参数意义详解

文章目录1.ps -l2.ps aux3.top面试经常被问道&#xff0c;特别是top。1.ps -l 参数解释F代表这个程序旗标 (process flags)&#xff0c;说明这个程序的总结权限&#xff0c;常见号码有&#xff1a;o 若为 4 表示此程序的权限为 root &#xff1b;o 若为 1 则表示此子程序仅进行…

python 打包成exe 程序的方法. 转

转自 https://blog.csdn.net/lzy98/article/details/83246281

哈希拓展--布隆过滤器

一、问题概述 布隆过滤器是由布隆提出来的&#xff0c;是由一个很长的二进制序列和一系列的映射函数组成。主要用于检测一个元素是否在一个集合中。当然在设计计算机软件时&#xff0c;我们也经常会判断一个元素是否在一个集合中。比如&#xff1a;在字处理软件中&#xff0c;…

开启一个新的命令行窗口

1&#xff0c;start cmd /k echo Hello, World!2&#xff0c;start cmd /C pause区别是第二种执行完毕以后&#xff0c;新开的窗口会自动关闭&#xff0c;第一种则不会

C语言中 \r, \n, \b

\r\n 和 \n 区别 &#xff08;重新排版整理&#xff09; \r回车符\n换行符计算机还没有出现之前&#xff0c;有一种叫做电传打字机&#xff08;Teletype Model 33&#xff09;的玩意&#xff0c;每秒钟可以打10个字符。但是它有一个问题&#xff0c;就是打完一行换行的时候&am…

排序(Sort)--【一】

排序&#xff0c;对于大家再熟悉不过了吧。我们之前在学习c语言的时候接触过的冒泡排序&#xff0c;选择排序等。今天给大家介绍两种新的排序。 1、直接插入排序 升序排列&#xff1a;将第一个数确定好&#xff0c;从下标为1的数开始插入&#xff0c;如果插入的数比前一个数大…

用python os.system 执行 批处理的时候, 出现的一些问题

如果 在一个py文件里面 , 假设用 三条语句 os.system(a.bat) os.system(b.bat) os.system(c.bat)这样的话 只会最后一条生效.

wait()和waitpid()的参数解析

进程的等待 #include <sys/types.h> #include <sys/wait.h> wait(),waitpid()区别&#xff1a; 在一个子进程终止前&#xff0c;wait使其调用者阻塞&#xff0c;而waitpid有一个选项&#xff0c;可使调用者不阻塞;waitpid()并不等待在其调用之后的第一个终止的…

快速排序--全集

快速排序&#xff1a;一听名字就知道这种排序很快的&#xff0c;是吧&#xff1f;没错&#xff0c;它是一种效率比较高的排序算法。 快速排序采用的是分治的思想。 比如&#xff0c;将一串数中的一个元素作为基准&#xff0c;然后将比它小的数排在它的左边&#xff0c;比它大…

task_struct结构体查找

网上有很多解析task_struct结构体的文章&#xff0c;可是都没有说这个结构体到底在哪里&#xff1f; 这个结构体位于头文件 shced.h cd / find -name sched.h 显示结果如下 注意只有 位于内核中的include 才是正确的。 /usr/src/kernels/2.6.32-431.el6.i686/include/linux…

使用python 创建快捷方式

import os import pythoncom from win32com.shell import shell from win32com.shell import shellcondef set_shortcut(): # 如无需特别设置图标&#xff0c;则可去掉iconname参数try:filename r"D:\AppServ\timer\win_cron_zq\timer.exe" # 要创建快捷方式的文件…

python 各个模块的简单介绍 转载

转自 https://www.jianshu.com/p/f8c43e25c02e

闹钟函数alarm()的解释与实践

alarm 定义 也称为闹钟函数&#xff0c;它可以在进程中设置一个定时器&#xff0c;当定时器指定的时间到时&#xff0c;它向进程发送SIGALRM信号。可以设置忽略或者不捕获此信号&#xff0c;如果采用默认方式其动作是终止调用该alarm函数的进程。 #include "head.h&quo…

Linux下如何设置权限让用户只删除自己的文件(粘滞位)

之前我们知道如何针对用户和用户组来设置文件权限。通常是用三个八进制来设置权限的&#xff0c;这里我要说的是&#xff0c;其实是由四个八进制表示的。其中第一个八进制我们通常是忽略的。第二个到第四个是对应于SUID,SGID,sticky-bit。 SUID&#xff1a;设置了SUID 位的文件…

CentOS安装yum 镜像 举例阿里云镜像

如何安装yum 镜像 CentOS 1、备份 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup 2、下载新的CentOS-Base.repo 到/etc/yum.repos.d/ CentOS 5 wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-5.r…

python在ubuntu执行sh脚本,提示权限不够的解决方法, 转载

https://blog.csdn.net/weixin_40320794/article/details/81772194

Vim简单配置

vim配置&#xff1a; &#xff08;在Centos6.5下配置vim&#xff09; 1.找到用户的主工作目录&#xff0c;ls看是否有.vimrc文件&#xff0c;有的话打开即可。没有的话自己touch一个。vim进入.vimrc中&#xff1a; set nu 设置行数 colorscheme desert syntax enabl…

运算符面试题(剑指offer,面试宝典,牛客网)

利用一个宏实现两个数的交换&#xff1f;不使用if,?,switch或者其他判断语句比较两个变量的大小&#xff1f;利用位运算实现加法&#xff1f;以下程序输出结果是&#xff1f;用位运算实现求平均数&#xff1f;不用循环判断一个数是不是2的N次方&#xff1f; 利用一个宏实现两个…