为什么程序中,常会用到signal(SIGCHLD,SIG_DFL)

为什么程序中,常会用到signal(SIGCHLD,SIG_DFL)
执行system函数时,SIGCHLD信号,最好被显示的:
signal( SIGCHLD, SIG_DFL )
一下,因为system函数中,使用到了fork(),waitpid.如果父进程忽略了SIGCHID信号,waitpid就没有不能得到子进程的SIGCHLD信号,那么,处理的返回值就会有问题。system的返回值也会有问题。通常的做法是:
signal( SIGCHLD, SIG_DFL );
system( command );
signal( SIGCHLD, SIG_IGN );

Jesus Love You!
转载自:http://blog.sina.com.cn/s/blog_633685790101ks9q.html
时间: 2024-10-11 15:59:59

为什么程序中,常会用到signal(SIGCHLD,SIG_DFL)的相关文章

signal(SIGCHLD, SIG_IGN);的使用及验证

#include <stdio.h> #include <unistd.h> #include <sys/types.h> #include<stdlib.h> #include<signal.h> int main(int argc , char **argv) {signal(SIGCHLD, SIG_IGN); int id; id=fork(); if(id<0) { printf("fork error\n")

在 C++程序中使用 QML技术经验

在 C++程序中使用 QMLQML API 是分为三个主类--QDeclarativeEngine QdeclarativeComponent 与 QDecl arativeContext.QDeclarativeEngine 提供 QML 运行的环境QdeclarativeComponent 封 装了 QML Documents 与 QDeclarativeCo ntext 允许程序导出数据到 QML 组件实例. QML 还包含了 API 的一个方便 通过 QDeclarativeView 应

多线程程序中操作的原子性

[转]http://www.parallellabs.com/2010/04/15/atomic-operation-in-multithreaded-application/ 多线程程序中操作的原子性 0. 背景 原子操作就 是不可再分的操作.在多线程程序中原子操作是一个非常重要的概念,它常常用来实现一些同步机制,同时也是一些常见的多线程Bug的源头.本文主要讨论了三 个问题:1. 多线程程序中对变量的读写操作是否是原子的?2. 多线程程序中对Bit field(位域)的读写操作是否是线程安全

linux应用程序中的延时和定时器

笔记: 在linux应用程序中延时有sleep().msleep()和usleep()函数之类的延时,也有如下形式的延时: struct timeval delay; delay.tv_sec = sleepSecond; delay.tv_usec = 0; select( 0, NULL, NULL, NULL, &delay ); 但是基本上都是基于进程休眠的,好像没有循环等待的延时,有待证实,目前没发现. 考虑到一个问题,如果定时发送信号,执行相应一个信号处理函数时,该函数还么有执行完成

signal(SIGCHLD, SIG_IGN)和signal(SIGPIPE, SIG_IGN);

signal(SIGCHLD, SIG_IGN)和signal(SIGPIPE, SIG_IGN); signal(SIGCHLD, SIG_IGN); 因为并发服务器常常fork很多子进程,子进程终结之后需要服务器进程去wait清理资源.如果将此信号的处理方式设为忽略,可让内核把僵尸子进程转交给init进程去处理,省去了大量僵尸进程占用系统资源.(Linux Only) 对于某些进程,特别是服务器进程往往在请求到来时生成子进程处理请求.如果父进程不等待子进程结束,子进程将成为僵尸进程(zomb

在Android程序中使用已有的SQLite数据库

已经将这篇文章迁移至 Code问答,你也能够到这里查看这篇文章,请多多关注我的新技术博客CodeWenDa.com 在中文搜索中,没有找到一篇比較好的关于怎样在Android应用中使用自己事先创建好的数据库的文章,于是在谷歌上找到这篇英文文章,依照它的步骤,測试成功.决定把这篇文章大致的翻译一下,想看原文的能够点击这里:http://www.reigndesign.com/blog/using-your-own-sqlite-database-in-android-applications/ .

C程序中让两个不同版本的库共存

原文连接:http://blog.gotocoding.com/archives/875 今天有同学提出,如何在一个C程序中让两个不同版本的库共存. 首先想到的方案是,把其中一个版本的库函数全部重命名,比如把每一个函数名都加一个_v2的后缀. 人工替换到没什么,但是如果函数个数超过10个,就有点不拿人当人使了. 而使有工具去替换就会遇到一些棘手的问题,如何识别哪些是函数,哪些是系统函数(系统函数不需要添加后缀)等. 随后想到的另一个解决方案是C++的方案,为其中一个版本库中的所有文件添加命名空间

在DevExpress程序中使用GridView直接录入数据的时候,增加列表选择的功能

在我上篇随笔<在DevExpress程序中使用Winform分页控件直接录入数据并保存>中介绍了在GridView以及在其封装的分页控件上做数据的直接录入的处理,介绍情况下数据的保存和校验等操作,不过还没有涉及到数据列表选择的这种方式,而这种在项目应用也是比较广泛的一种输入方式.本篇随笔继续探讨在GridView上直接录入数据,并增加字典选择列表的功能. 1.GridView直接录入数据回顾 在之前整合的数据录入案例里面,我们可以看到可以在列表里面直接录入速度的便捷性,如下所示. 1)直接在G

在DevExpress程序中使用Winform分页控件直接录入数据并保存

一般情况下,我们都倾向于使用一个组织比较好的独立界面来录入或者展示相关的数据,这样处理比较规范,也方便显示比较复杂的数据.不过在一些情况下,我们也可能需要直接在GridView表格上直接录入或者修改数据,这种对于字段比较少,而且内容相对比较简单的情况下,效率是比较高的一种输入方式.本篇随笔主要介绍在DevExpress程序中使用GridView直接录入数据并保存的实现,以及使用Winform分页控件来进行数据直接录入的实现操作. 1.在GridView上展示数据 在GridView上展示数据,只