一、POSIX信号处理

信号:告知某进程发生了某个事件的通知(软中断),通常是异步的。

信号可以:由进程发给另一个进程,由内核发给某个进程。

设置信号处理办法,有三个选择:

1.写一个函数,在信号发生时立即调用。不过SIGKILL和SIGSTOP不能被捕获。

有些信号如SIGIO、SIGPOLL和SIGURG。

2.设置信号处理办法为SIG_IGN来忽略,SIGKILL和SIGSTOP不能忽略

3.设置信号处理办法为SIG_DFL来设置缺省处理。

#include <signal.h>

sighandler_t signal(int signum, sighandler_t handler);
返回值:成功返回以前的信号处理配置,出错返回SIG_ERR
signum:信号名
handler:上面三个的一种,函数名,SIG_IGN或SIG_DFL

对POSIX兼容系统上的信号处理作以下总结:

  • 一旦安装了信号处理程序,便一直安装着。
  • 当一个信号处理程序正在执行时,所递交的信号是阻塞的。包括在sa_mask中定义的信号。
  • 信号在阻塞时生成了多次,解阻塞时只发生一次。
  • 用sigprocmask可以选择性的阻塞和不阻塞一组信号

二、处理SIGCHLD信号

当一个进程终止,如果它有子进程处于僵尸状态,则所有僵尸子进程的父进程ID均设置为1。

警告:在信号处理程序中调用诸如printf这样的标准I/O函数是不合适的。

太长了,原谅我看不懂。。。。

三、wait和waitpid函数

#include <sys/wait.h>

pid_t wait(int *statloc);
pid_t waitpid(pid_t pid, int *statloc, int options);
返回:进程ID0成功,-1出错
statloc:子进程终止状态
options:

当服务器创建子进程处理消息后,子进程结束时。会发送SIG_CHILD信号。此时如果有多个进程同时退出,那么

进程的SIG_CHILD在阻塞时收到,就会只响应一次。

所以需要wait或waipid处理。

 #include "unp.h"

 void
sig_chld(int signo)
{
pid_t pid;
int stat; while((pid = waitpid(-, &stat, WHOHANG)) > )
printf("child %d terminated\n", pid);
return;
}

我们在网络编程时可能会遇到的三种情况:

1.当派生子进程时,必须捕获信号SIGCHLD。

2.当捕获信号时,必须处理被中断的系统调用。

3.SIGCHLD的信号处理程序必须正确编写,应使用函数waitpid以免留下僵尸进程。

四、服务器进程终止

1.在不同主机上启动服务器和客户,并在客户键入一行,若正常。服务器回射

2.找到服务器子进程,并杀死该进程。子进程发送FIN给客户,客户TCP相应的以ACK响应。

3.信号SIGCHLD发往服务器并正确处理。

4.客户TCP从服务器TCP接收FIN并以ACK响应。但客户进程正阻塞在fgets,等待从终端上得到一行。

5.运行netstat观察客户套接口状态

6.再键入一行,

7.看不下去了

8。。。。。。

五、SIGPIPE信号

六、服务器主机崩溃

UNP学习第五章(二)的更多相关文章

  1. UNP学习第五章

    一.概述 想要写一个完整的TCP客户-服务器程序例子,有下面功能的回射服务器 1.客户从标准输入读一行文本,写到服务器上: 2.服务器从网络输入读此行,并回射给客户: 3.客户读此回射行并写到标准输出 ...

  2. Java基础知识二次学习--第五章 数组

    第五章 数组 时间:2017年4月26日15:11:30~2017年4月26日15:15:54 章节:05章_01节  视频长度:09:30 内容:一维数组的内存分析 心得: Java中数组是引用类型 ...

  3. C#高级编程 (第六版) 学习 第五章:数组

    第五章 数组 1,简单数组 声明:int[] myArray; 初始化:myArray = new int[4]; 为数组分配内存. 还可以用如下的方法: int[] myArray = new in ...

  4. UNP学习第六章(二)

    一.描述符就绪条件 对于引起select返回套接字“就绪”的条件我们必须讨论得更明确: (1)满足一下塞个条件中的仍和一个时,一个套接字准备好读. a)该套接字接收缓冲区中的数据字节数不大于等于套接字 ...

  5. C语言学习第五章

    今天要进行一个重要元素数组的学习了.这一章要掌握什么是数组,数组怎么样命名,数组怎么样使用,以及一些常见的错误和需要注意的事项. 一.      数组的基本概念 数组是可以在内存中连续存储多个元素的结 ...

  6. 深度学习框架PyTorch一书的学习-第五章-常用工具模块

    https://github.com/chenyuntc/pytorch-book/blob/v1.0/chapter5-常用工具/chapter5.ipynb 希望大家直接到上面的网址去查看代码,下 ...

  7. UNP学习第三章

    一.主机字节序和网络字节序 转换时用到下列四个函数: #include <netinet/in.h> uint16_t htons(uint16_t host16bitvalue); ui ...

  8. salesforce 零基础学习(五十二)Trigger使用篇(二)

    第十七篇的Trigger用法为通过Handler方式实现Trigger的封装,此种好处是一个Handler对应一个sObject,使本该在Trigger中写的代码分到Handler中,代码更加清晰. ...

  9. java并发学习第五章--线程中的锁

    一.公平锁与非公平锁 线程所谓的公平,就是指的是线程是否按照锁的申请顺序来获取锁,如果是遵守顺序来获取,这就是个公平锁,反之为非公平锁. 非公平锁的优点在于吞吐量大,但是由于其不是遵循申请锁的顺序来获 ...

随机推荐

  1. springmvc的@ModelAttribute

    1:作用:执行任何方法前都要先执行一下有这个标识的方法. 用途:表单回显的时候先从数据库中查询出来放到这个方法中. 1):模拟表单 <form action="first/testMo ...

  2. php strncasecmp()函数 语法

    php strncasecmp()函数 语法 作用:比较字符串前n个字符,不区分大小写直线电机 语法:strncasecmp(string1,string2,length) 参数: 参数 描述 str ...

  3. 前端每日实战:46# 视频演示如何用纯 CSS 创作一个在容器中反弹的小球

    效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/jKVbyE 可交互视频教程 此视频 ...

  4. MySQL查询缓存详解(总结)

    MySQL查询缓存详解(总结) 一.总结 一句话总结: mysql查询缓存还是可以用用试一试,但是更推荐分布式,比如redis/memcache之流,将数据库中查询的数据和查询语句以键值对的方式存进分 ...

  5. shallow update not allowed

    ! [remote rejected] master -> master (shallow update not allowed) https://stackoverflow.com/quest ...

  6. 关于之前提到的python开发restful风格的接口

    此处不做详细说明. https://gitee.com/alin2017/my-i-demo.git 附上git地址,有兴趣的可以去clone一下. 里面针对代码都有相应的注释, 对于每一个文件也有r ...

  7. CentOS 7下升级python版本到3.X

    由于python官方已宣布2.x系列即将停止支持,为了向前看,我们升级系统的python版本为3.x系列服务器系统为当前最新的CentOS 7.4 1.安装前查看当前系统下的python版本号 # p ...

  8. C++ 常见的cin的错误处理

    写程序时想要用 cin 对输入的合法性检查,于是学习了一下 cin.fail() 函数,顺便学习了类似的一些函数. cin 对象包含了一个描述流状态的数据成员.流状态有 3 个标志位:eofbit,b ...

  9. 2.Jmeter 如何在jsr223 脚本中停止测试任务

    Jmeter 如何在jsr223 脚本中停止测试任务 在可以直接引用ctx的变量的processor中可以执行如下脚本即可. (例如jsr223 postprocessor中) ctx.getEngi ...

  10. 将本地图片数据制作成内存对象数据集|tensorflow|手写数字制作成内存对象数据集|tf队列|线程

      样本说明: tensorflow经典实例之手写数字识别.MNIST数据集. 数据集dir名称 每个文件夹代表一个标签label,每个label中有820个手写数字的图片 标签label为0的文件夹 ...