> 育儿
常用于网络编程(网络编程有哪些函数)
导语:网络编程中需要处理的常用信号总结
一、SIGPIPE当往一个写端关闭的管道或socket连接中连续写入数据时会引发SIGPIPE信号,引发SIGPIPE信号的写操作将设置errno为EPIPE。在TCP通信中,当通信的双方中的一方close一个连接时,若另一方接着发数据,根据TCP协议的规定,会收到一个RST响应报文,若再往这个服务器发送数据时,系统会发出一个SIGPIPE信号给进程,告诉进程这个连接已经断开了,不能再写入数据。
实例程序server端include <string.h>include <arpa/inet.h>include <errno.h>include <stdlib.h>34;SIGPIPE : %d\n&34;first msg&34;success write %d bytes\n&34;second msg&34;write error: %s\n&34;accept&include<stdio.h>include<errno.h>include<sys/types.h>include<sys/socket.h>include<arpa/inet.h>define PORT 888839;0&34;socket&34;connect&34;shutdown perror&include <stdio.h> 34;%s : sighup received &34;&该句的作用是屏蔽SIGHUP信号,trap可以屏蔽很多信号 sigtest 2. nohup sigtest 可以直接在命令行执行, 若想做完该操作后继续别的操作,可以 nohup sigtest & 3. 编写shell,内容如下 sigtest & 其实任何将进程变为孤儿进程的方式都可以,包括fork后父进程马上退出。三、SIGINT && SIGTERM && SIGKILL信号
产生方式
对进程的影响
SIGINT
ctrl+c
信号被当前进程树接收到,也就是说,不仅当前进程会收到信号,它的子进程也会收到
SIGTERM
kill {pid}
只有当前进程收到信号,子进程不会收到。如果当前进程被kill了,那么它的子进程的父进程将会是init,也就是pid为1的进程
SIGKILL
kill -9 {pid}
与SIGTERM 不同的是,此信号不会被阻塞
SIGKILL and SIGSTOP不能被捕获、阻塞或者ignore,最好使用SIGTERM信号来结束程序,这种方式操作系统会执行一些清理操作。
本文内容由小思整理编辑!