关于SIGHCLD和SIGCLD

进程间通信---两个重要的信号SIGALRM信号&SIGCLD信号 1、SIGALRM信号 alarm函数实现了定时发送SIGALRM信号的功能。(每一个进程都有一个唯一的计时器) unsigned int alarm(unsigned int seconds) 参数seconds:设定定时时间,超过这个时间时发送SIGALRM信号 返回值:返回定时器剩余描述 结合一个示例: #include<stdio.h> #include<... 阅读详情

SIGCLD

简单的说, SIGCLD不是可靠信号. 这里的不可靠是指当大量信号来的时候, 重复信号它只会处理一次, 而不是多次. 很多信号在瞬间("同时")产生,内核也不一定能够一一处理, 不保证产生的次数.


SIGHCLD

  • 如果父进程在fork之后调用wait,就会阻塞,直到有一个子进程退出。如果父进程在fork之前先signal(SIGCLD,Fun),即注册了SIGCLD的信号处理函数。然后做自己的事情。
    当子进程退出时,会给父进程发送一个SIGCLD信号。然后Fun函数就会执行。可以在Fun函数中调用wait获得子进程退出时的状态,并且此时wait不会阻塞。
    当Fun函数执行完后,父进程又继续做自己的事情。

  • SIGCHLD简单的说,子进程退出时父进程会收到一个SIGCHLD信号,默认的处理是忽略这个信号,而常规的做法是在这个信号处理函数中调用wait函数获取子进程的退出状态。

  1. /*************************************************************************
  2. > File Name: SIGCHLD_SIGCLD.cpp
  3. > Author: Function_Dou
  4. > Mail:
  5. > Created Time: 2018年02月03日 星期六 17时56分10秒
  6. ************************************************************************/
  7. #include<sys/wait.h>
  8. #include<stdio.h>
  9. #include<stdlib.h>
  10. #include<unistd.h>
  11. #include<sys/wait.h>
  12. static void sig_cld(int);
  13. int main()
  14. {
  15. pid_t pid;
  16. // if(signal(SIGCLD,sig_cld) == SIG_ERR)
  17. if(signal(SIGCHLD,sig_cld) == SIG_ERR)
  18. {
  19. printf("signal error\n");
  20. exit(-1);
  21. }
  22. if((pid = fork()) < 0)
  23. {
  24. printf("fork error\n");
  25. exit(-1);
  26. }
  27. else if(pid == 0)
  28. {
  29. //child
  30. printf("%d fork a new child %d\n",getppid(),getpid());
  31. sleep(1);
  32. exit(0);
  33. }
  34. else
  35. {
  36. //parent
  37. // sig_cld(0);
  38. int i,j;
  39. for(i=0;i<100;i++)
  40. {
  41. for(j=0;j<10000000;j++)
  42. ;
  43. printf("%d\n",i);
  44. }
  45. }
  46. }
  47. static void sig_cld(int)
  48. {
  49. pid_t pid;
  50. int status;
  51. printf("SIGCLD received\n");
  52. // wait() 返回退出状态
  53. if((pid = wait(&status)) <0)
  54. {
  55. printf("wait error\n");
  56. }
  57. printf("pid = %d\n",pid);
  58. }

运行结果

  1. [root@localhost Signal]# ./a.out
  2. 13936 fork a new child 13937
  3. 0
  4. 1
  5. 2
  6. ...
  7. 51
  8. 52
  9. SIGCLD received
  10. pid = 13937
  11. 53
  12. 54
  13. ...

从运行就可以看出来, 信号中的函数调用wait()父进程依然在运行, 当子进程结束后, 父进程接着执行.
当去掉signal那段函数, 在else中调用sig_cld()函数, 结果将发生改变, 当子进程结束, 父进程才继续运行.

薅“刷宝”羊毛的autojs脚本教程,简单粗暴好用!!! 本教程旨在帮助大家实现用手机或闲置手机来进行“刷宝”平台的收益,能薅多少米就看你的本事了,作者教你的是如何用autojs来进行脚本的挂机教程,掌握了这个思路后,你可以根据自己的实际需要来改进脚本或者撸别的平台:) 适用系统,**android4.0以上,苹果机暂不适用**(大多数android系统手机都是7.0以上,要查看自己手机是android几,见文件夹“视频教程-基础”>1.查看android版本的方法) 阅读详情

相关推荐

[漏洞剖析]JeecgBoot queryFieldBySql注入与JDBC连接滥用:从内存马植入到RCE的完整攻击链

本文深度剖析了JeecgBoot框架中queryFieldBySql接口的SQL注入漏洞及其引发的完整攻击链。攻击者利用该漏洞,通过Freemarker SSTI植入隐蔽的内存马,并进一步滥用JDBC连接测试功能,借助H2数据库特性实现远程命令执行(RCE),揭示了低代码平台中功能滥用与安全配置疏忽带来的严重风险。

weixin_29232121的博客 115

信号 09 | SIGCLD语义

1. SIGCLD信号 SIG_DFL :默认的处理方式是不理会这个信号,但是也不会丢弃子进程状态,所以如果不用wait,waitpid对其子进行进行状态信息回收,会产生僵尸进程。 SIG_IGN :忽略的处理方式,这个方式和默认的忽略是不一样的语意,暂且我们把忽略定义为SIG_IGN,在这种方式下,子进程状态信息会被丢弃,也就是自动回收了,所以不会产生僵尸进程,但是问题也就来了,wait,w...

月雲之霄的博客 911

【 史上最全】测绘、遥感RS、地信GIS国家级比赛竞赛整理

目录Esri Esri

weixin_43910227的博客 9153

APUE编程:73---信号处理(SIGCLD、SIGHCLD信号处理)

一、SIGCLD、SIGHCLD信号 SIGCLD和SIGHCLD这两个信号很容易混淆: SIGCLD是System V采用的信号名 SIGCHLD是BSD采用的信号名。POSIX.1也采用BSD的SIGCHLD信号 只有Linux 3.2.0和Solaris 10定义了SIGCLD,SIGCLD等同于SIGCHLD 务必了解你所使用的系统实现中SIGCHLD或SIGCLD信号的...

董哥的黑板报 1425

实战分享:如何用Dify和MaxKb实现文档智能切分与高效检索(附代码解析)

本文详细介绍了如何结合Dify和MaxKB构建文档智能切分与高效检索系统。针对传统全文检索的不足,提出了结构感知的文档切分方案,通过解析文档层级关系并构建标题链,实现了精准的章节级检索。文章包含完整的代码实现,涵盖文档解析、智能切分、向量化策略及双索引优化,并分享了性能调优和生产环境实践经验。

qsc90123456的博客 546

【QT+PCL】串口读取单线激光雷达数据并在QVtkWidget组件中实时刷新(一)

(本文主要记录开发过程以及遇到的困难及解决方式)

2301_76329543的博客 3068

信号之中断的系统调用、可重入函数、SIGCLD语义以及可靠信号术语和语义

本文来自个人博客:https://dunkwan.cn 文章目录中断的系统调用可重入函数`SIGCLD`语义可靠信号术语和语义 中断的系统调用 早期UNIX系统的一个特性是:如果进程在执行一个低速系统调用而阻塞期间捕捉到一个信号,则该系统调用就被中断不再继续执行。该系统调用返回出错,其errno设置为EINTR。这样处理是因为一个信号发生了,进程捕捉到它,这意味着已经发生了某种事情,所以是个好...

Dunk.Wan 503

C#上位机与MES系统数据对接:从协议选型到安全传输的实战解析

本文详细解析了C#上位机与MES系统数据对接的全过程,从协议选型到安全传输的实战技巧。针对工业互联网场景下的数据对接挑战,提供了RESTful API、MQTT和OPC UA等协议的选型建议,并分享了健壮性设计、异常处理和安全传输的实用代码示例,帮助开发者高效实现数据上传与系统集成。

weixin_30566063的博客 105

SIGCLD语义

systemv SIGCLD语义 虽然SIGCLD默认处理动作是忽略,但是当我们通过signal函数将 SIGCLD显示设为SIG_IGN,该进程的子进程不在保留最终状态,故该进程的子进程将不产生僵尸进程。 当我们为SIGCLD注册自定义函数时,如果有终止子进程,系统会立即检查是否有终止的子进程等待被wait,即使当前pending表中没有SIGCLD,也会立即执行SIGCLD的处理函数。 SIGC

我喜欢雨天的清新的博客 558

SAP 财务接口开发:完全清账 vs 标准过账的 CO-PA(获利能力字段) 赋值全解析(含设计哲学)

用于完全清账场景:用于标准凭证过账/部分清账两者对 CO-PA 数据的传递方式截然不同。本文不仅提供完整的代码实现,更深入解析为什么 SAP 要这样设计——了解设计哲学,才能灵活应对各类需求。完全清账→ 调用,必须在T_FTPOST中传递,其他特征用BSEG-RKE_前缀。标准过账/部分清账→ 调用,在CRITERIA表中传递特征,字段名直接用WERKSARTNR等。SAP 的设计智慧面向不同场景,采用不同机制,各司其职。通过接口抽象,将复杂的 CO-PA 配置逻辑封装在内部,对外提供简洁的调用方式。

Pegasus666的博客 328

具身智能:原理、算法与系统 第3章 具身智能的感知-认知-行为框架

具身智能的PCB框架源于对生物智能系统的观察:动物通过感官接收环境信息(感知),基于内部模型进行预测和决策(认知),并通过身体执行动作改变环境(行为),而这一改变又通过感知反馈形成闭环。这一框架在两篇核心文献中得到了深入阐述:提出了系统的数学形式化和工程实现,则从认知科学角度强调了归纳偏置和双过程理论的重要性。

VectorShift的博客 155

UNIX(编程-进程处理):30---僵死进程、孤儿进程(SIGCLD、SIGHCLD信号处理)

UNIX(编程-进程处理):30---僵死进程、孤儿进程(SIGCLD、SIGHCLD信号处理) 原创江南、董少 发布于2019-12-28 21:30:23 阅读数 38 收藏 展开 一、孤儿进程 父进程在子进程结束之前终止,那么子进程就变为孤儿进程 对于其父进程已经终止的所有孤儿进程,它们的父进程都改变为init进程。我们称这些进程由init进程领养。其操作过程大致是:在一个进程终止时,内...

cxu123321的博客 255

环境配置与基础教程:2026大厂标准:使用 DVC (Data Version Control) 实现 YOLO 数据集版本控制全链路管理

本文介绍了使用DVC 3.0对YOLO数据集进行全链路版本控制的方法。主要内容包括: DVC 3.0的核心增强:内容块级缓存去重、并行云传输、AI智能体元数据跟踪等新特性,可显著提升YOLO数据集管理效率。 环境配置:详细说明DVC 3.0的安装步骤、项目初始化方法以及远程存储配置方案(支持S3、GCS、Azure等多种存储后端)。 目录结构规范:提供符合大厂MLOps标准的项目目录结构设计。 实战操作: 原始数据版本化 多格式标注数据版本控制 版本切换方法 优势说明:DVC通过哈希指针机制管理大型数据集,

ZXSXJ的博客 148

APUE编程:120---进程管理(僵死进程、孤儿进程:SIGCLD、SIGHCLD信号处理)

一、孤儿进程 父进程在子进程结束之前终止,那么子进程就变为孤儿进程 对于其父进程已经终止的所有孤儿进程,它们的父进程都改变为init进程。我们称这些进程由init进程领养。其操作过程大致是:在一个进程终止时,内核逐个检查所有活动进程,以判断它是否是正要终止的进程的子进程,如果是,则该进程的父进程ID就更改为1( init进程的ID)。这种处理方法保证了每个进程有一个父进程 一个由init进程...

董哥的黑板报 1006

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Linux(入门基础):16---信号(2)定义、种类、signal、SIGCLD、kill、raise

不存在编号为0的信号 kill函数对信号编号为0有特殊的应用 一、产生信号的条件 (2) SIGINT ctrl +c 终止信号 (3) ctrl +\ 暂停信号,放入后台 (4) 非法指令 (5) abort 进程异常终止 (7) SIGBUS (虚实关系建立) 总线错误(从写的位置到物理内存,操作系统没有将磁盘的开始位置到物理内存之间建立 联系 mmap(把虚拟内存和磁盘文件的

du_lijun的博客 575

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

说说SIGCLD和SIGCHLD

在学习 APUE 信号一章时,书中描述 SIGCLD和 SIGCHLD信号时,我一时没有搞清楚,在查阅一些资料后把二者的不同描述在此。 APUE这本书有一个很大的特点是:它全书写的是Unix平台的编程,因此会引入很多不同平台的差异,这在编写跨平台应用程序的时候有很大的参考价值。但是这样也带来了一个不好的后果:如果一个刚接触Unix编程的读者在读这些内容时(假设像我一样使用Linux平台学习),会一时抓不住重点,书中论述的在不同平台下的不同差异反而会成为学习的负担。另外还有一个更糟的问题是:对比的几个平台大部

Frank的专栏 1292

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

signal(SIGCLD,SIG_IGN)

遇到信号量的问题?  signal(SIGCLD,SIG_IGN) SIGCHLD的语义为:子进程状态改变后产生此信号,父进程需要调用一个wait函数以确定发生了什么。  对于SIGCLD的早期处理方式如下:如果进程特地设置该信号的配置为SIG_IGN,则调用进程的子进程将不产生僵死进程。  如果将SIGCLD的配置设置为捕捉,则内核立即检查是否有子进程准备好被等待,如果是这样,则调用S

cffishappy的专栏 8718

UNIX环境高级编程 学习笔记 第十章 信号

信号是软件中断。信号提供了一种处理异步事件的方法,如终端用户键入中断键,会通过信号机制停止一个程序,或及早终止管道中的下一个程序。 UNIX早期系统(如V7)提供的信号模型不可靠,信号可能丢失。而且在执行临界区代码时,进程很难关闭所选择的信号。4.3BSD和SVR3对信号模型增加了可靠信号机制,但Berkeley和AT&T所做更改之间不能兼容。POSIX.1对可靠信号例程进行了标准化。 每个信号都有一个名字,它们由SIG开头。如SIGABRT是夭折信号;SIGALRM是闹钟信号,由alarm函数设置

tus00000的博客 1377

10.7 信号_SIGCLD语义

<br />    SIGCHLD的语义为:子进程状态改变后产生此信号,父进程需要调用一个wait函数以确定发生了什么。<br />    对于SIGCLD的早期处理方式如下:如果进程特地设置该信号的配置为SIG_IGN,则调用进程的子进程将不产生僵死进程。如果将SIGCLD的配置设置为捕捉,则内核立即检查是否有子进程准备好被等待,如果是这样,则调用SIGCLD处理程序。

cxf100900的专栏 542

进程间通信简介(一)——信号

进程间通信(InterProcess Communication, IPC)就是在不同进程之间传播或交换信息。交换信息的方式简单的有很多,比如说通过全局变量或函数调用,又或者是两个进程通过磁盘上的普通文件交换信息,亦或是通过“注册表”或其它数据库中的某些表项和记录交换信息。

ReganDu的博客 1355

Linux函数sighold例子,转-Unix系统进程对SIGTERM、SIGUSR1和SIGUSR2信号处理(示例代码)...

好久没更新博客了,写篇文章除除草。这篇文章主要通过简单的例子说明一下Unix/Linux进程中如果捕捉和处理SIGTERM、SIGUSR1和SIGUSR2信号。先说明一下这三个信号:信号(signal)是*nix系统中进程之间通信(IPC)的一种常见方式。SIGTERM:进程终止信号,效果等同于*nix shell中不带-9的kill命令;SIGUSR1:保留给用户使用的信号;SIGUSR2:同S...

weixin_30045091的博客 1754

使用Supervisor守护Python进程

1、需求 现在有一个进程需要每时每刻不断的跑,但是这个进程又有可能由于各种原因有可能中断。当进程中断的时候我希望能自动重新启动它,此时,就需要使用到了Supervisor。Supervisor起到守护进程的作用。 2、安装 https://pypi.python.org/pypi/supervisor tar zxvf supervisor-3.0.tar.gz cd su...

weixin_30595035的博客 298

两个重要信号

8.5.1 SIGALRM信号         在进行阻塞式系统调用时,为避免进程陷入无限期的等待,可以为这些阻塞式系统调用设置定时器。Linux提供了alarm系统调用和SIGALRM信号实现这个功能。         要使用定时器,首先要安装SIGALRM信号。如果不安装SIGALRM信号,则进程收到SIGALRM信号后,缺省的动作就是终止当前进程。SIGALRM信号安装成功后,在什么情况

cnbird's blog 1238

linux信号函数signal(SIGCHLD, SIG_IGN)

我们调用fork函数派生一个子进程后,当子进程快要结束,会向父进程发送一个SIGCHLD信号,告诉父进程我快结束,赶快调用wait函数,来回收子进程的退出状态和其他信息。 这就是一种我们通常来预发僵尸进程产出的方法,在父进程接收到SIGCHLD信号后,将默认行为改为wait来回收子进程的信息。如果父进程没有调用wait函数,子进程先于父进程退出,则子进程将成为僵尸进程。 但是wait函数需要阻塞

辛明辉的专栏 9944

UNIX系统中wait函数簇和SIGCLD信号的关系

有朋友疑惑“为什么有了wait函数族还需要使用SIGCHLD信号?”。本文详细地阐述UNIX系统中wait函数族和SIGCHLD信号的关系。  一、unix中僵尸进程的含义  关于unix中僵尸进程的含义: 凡是父进程没有调用wait函数获得子进程终止状态的子进程在终止之后都是僵尸进程,这个概念的关键一点就是父进程是否调用了wait函数。  二、SIGCHLD信号  SIGCHL

简单生活 2762
上一篇: signal函数
下一篇: 信号集的操作
Function_18
博客等级 码龄10年 193粉丝 239原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值