1避免异步I/O的类型

sig_atomic_t

平台下的原子类型

volatile(晚上上网查找)

防止编译器开启优化选项是,优化对内存的读写。

2 SIGCHLD信号处理

SIGCHLD的产生条件

子进程终止时

子进程接收到SIGSTOP信号停止时

子进程处在停止态,接受到SIGCONT后唤醒时

案例说明:

#include <stdio.h>

#include <stdlib.h>

#include <unistd.h>

#include <errno.h>

#include <sys/types.h>

#include <sys/wait.h>

#include <signal.h>

void sys_err(char *str)

{

perror(str);

exit(1);

}

void do_sig_child(int signo)

{

int status;

pid_t pid;

while ((pid = waitpid(0, &status, WNOHANG)) > 0) {

if (WIFEXITED(status))

printf("child %d exit %d\n", pid, WEXITSTATUS(status));

else if (WIFSIGNALED(status))

printf("child %d cancel signal %d\n", pid,WTERMSIG(status));

}

}

int main(void)

{

pid_t pid;

int i;

for (i = 0; i < 10; i++) {

if ((pid = fork()) == 0)

break;

else if (pid < 0)

sys_err("fork");

}

if (pid == 0) {

int n = 18;

while (n--) {

printf("child ID %d\n", getpid());

sleep(1);

}

return i;

}

else if (pid > 0) {

//先设置捕捉

//再解除对SIGCHLD的阻塞

struct sigaction act;

act.sa_handler = do_sig_child;

sigemptyset(&act.sa_mask);

act.sa_flags = 0;

sigaction(SIGCHLD, &act, NULL);

while (1) {

printf("Parent ID %d\n", getpid());

sleep(1);

}

}

return 0;

}

运行结果:

最后运行后的结果都是:Parent ID 6000

3.status处理方式

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

options

WNOHANG

没有子进程结束,立即返回

WUNTRACED

如果子进程由于被停止产生的SIGCHLD, waitpid则立即返回

WCONTINUED

如果子进程由于被SIGCONT唤醒而产生的SIGCHLD, waitpid则立即返回获取status

WIFEXITED(status)

子进程正常exit终止,返回真

WEXITSTATUS(status)返回子进程正常退出值

WIFSIGNALED(status)

子进程被信号终止,返回真

WTERMSIG(status)返回终止子进程的信号值

WIFSTOPPED(status)子进程被停止,返回真

WSTOPSIG(status)返回停止子进程的信号值

WIFCONTINUED(status)

子进程由停止态转为就绪态,返回真

4.sigqueue

int sigqueue(pid_t pid,int sig,const union sigval value)

union sigval{

int sival_int;

void *sival_ptr;

}

5 sigaction

void (*sa_sigaction)(int, siginfo_t *, void*)

siginfo_t {

int si_int; /* POSIX.1b signal */

void *si_ptr; /* POSIX.1b signal */

sigval_t si_value; /* Signal value */

...

}

sa_flags = SA_SIGINFO

3信号处理之:避免异步IO的类型,SIGCHLD信号处理相关推荐

  1. 基础服务器 IO 模型 Proactor 模型 Reactor 模型 IO 多路复用 异步 IO 模型 Linux 服务器开发 网络编程服务器模型

    本文主要记录服务器的 IO 模型的类型(从多路复用,异步 IO 讲到 Proactor Reactor 模型),包括 Real World nginx 和 apache ,kafka 等分析,配备自洽 ...

  2. Node的异步与java的异步_node中异步IO的理解

    解释性语言和编译型语言的区别: 计算器不能直接的理解高级语言,只能理解机器语言,所以必须把高级语言翻译为机器语言,翻译的方式有两种,一个是编译,一个是解释. 解释性语言的程序不需要编译,它是在运行程序 ...

  3. 操作系统学习:Linux0.12文件异步IO

    本文参考书籍 1.操作系统真相还原 2.Linux内核完全剖析:基于0.12内核 3.x86汇编语言 从实模式到保护模式 4.Linux内核设计的艺术 ps:基于x86硬件的pc系统 Linux0.1 ...

  4. 异步IO(协程,消息循环队列)

    同步是CPU自己主动查看IO操作是否完成,异步是IO操作完成后发出信号通知CPU(CPU是被通知的) 阻塞与非阻塞的区别在于发起IO操作之后,CPU是等待IO操作完成再进行下一步操作,还是不等待去做其 ...

  5. Node - 异步IO和事件循环

    前言 学习Node就绕不开异步IO, 异步IO又与事件循环息息相关, 而关于这一块一直没有仔细去了解整理过, 刚好最近在做项目的时候, 有了一些思考就记录了下来, 希望能尽量将这一块的知识整理清楚, ...

  6. Day10-Python3基础-协程、异步IO、redis缓存、rabbitMQ队列

    内容目录: Gevent协程 Select\Poll\Epoll异步IO与事件驱动 Python连接Mysql数据库操作 RabbitMQ队列 Redis\Memcached缓存 Paramiko S ...

  7. 【多线程】0.理解一下5种IO模型、阻塞IO和非阻塞IO、同步IO和异步IO

    5种IO模型.阻塞IO和非阻塞IO.同步IO和异步IO 看了一些文章,发现有很多不同的理解,可能是因为大家入切的角度.环境不一样.所以,我们先说明基本的IO操作及环境. 本文是在<UNIX网络编 ...

  8. python异步io多文件_Python 异步 IO 性能又上一层楼

    最近看源码的过程中,发现了一个比较有意思的库,aiomultiprocess,我认为他确实是 Python 升级到 3.8 之后一个特性的总结库,包括静态检查和性能提升. 这个是作者提供的一个 IO ...

  9. 重叠IO模型-异步IO

    重叠IO模型-异步IO http://laiba.tianya.cn/laiba/CommMsgs?cmm=959&tid=2701316824681802728 说到重叠模型首先还是提一下异 ...

最新文章

  1. There is no Citrix MetaFrame server configured on the specified address错误的解决方法
  2. UITableView HeaderView,FooterView 使用SnapKit布局导致约束异常
  3. Equifax再陷风波:一门户网站管理员密码是admin/admin
  4. 只给测试集不给训练集,要怎么做自己的物体检测器?
  5. 学python的好处-python语言的优点和缺点
  6. vmware下/mnt/hgfs下为空的问题
  7. Sublime Text 无法使用Package Control或插件安装失败的解决方法【转】
  8. Asp.net 安装包制作 (转)
  9. 今天你们表现的真棒!!!
  10. 《大数据》多名编委当选CCF第十二届理事会成员!
  11. C# 自动投票和手机号码归属地查询 - 简单程序源码分享(高手飘过)
  12. 2021-06-27变量的作用域
  13. 深入剖析 Sharepoint 企业项目管理与 SharePoint(转)
  14. 最简单的YUV422转jpg的例程
  15. 数字图像字符识别——数字识别
  16. Android Gradle manifestPlaceholders 的妙用
  17. ARM CM0 push和pop指令
  18. Python最抢手、Java最流行、Go最有前途,7000位程序员揭秘2019软件开发现状
  19. CrystalDiskInfo硬盘检测工具 标准版及萌妹版
  20. 增强 扫描王 源码_OpenCV探索之路(二十二):制作一个类“全能扫描王”的简易扫描软件...

热门文章

  1. JavaScript实现graphBridges图桥算法(附完整源码)
  2. OpenCASCADE:常用Inspector控件之3D 视图
  3. OpenCASCADE绘制测试线束:形状修复命令之转换命令
  4. OpenCASCADE绘制测试线束:数据交换命令之XDE 图层命令
  5. OpenCASCADE:调试工具和提示
  6. boost::process::windows相关的测试程序
  7. boost::mpl模块实现erase相关的测试程序
  8. boost::hana::fold_left用法的测试程序
  9. boost::math::bernoulli_b2n用法的测试程序
  10. Boost:path的测试程序