进程通信-2
信号
信号名称
非捕获就停止进程的信号
信号名称 | 说明 |
---|---|
SIGABORT | 进程异常终止 |
SIGALRM | 超时警告 |
SIGFPE | 浮点运算异常 |
SIGHUP | 链接挂断 |
SIGILL | 非法指令 |
SIGINT | 终端中断 |
SIGKILL | 终止进程(无法被捕获或者忽略) |
SIGPIPE | 向无读进程的管道写数据 |
SIGQUIT | 终端退出 |
SIGSEGV | 无效内存段访问 |
SIGTERM | 终止 |
SIGUSR1 | 用户定义信号1 |
SIGUSR2 | 用户定义信号2 |
其余信号
信号名称 | 说明 |
---|---|
SIGCHID | 子进程已经停止或退出 |
SIGCONT | 继续执行暂停的进程 |
SIGSTOP | 停止执行(无法被捕获或者忽略) |
SIGSTEP | 终端挂起 |
SIGTTIN | 后台进程尝试读操作 |
SIGTTOU | 后台进程尝试写操作 |
相关函数
signal
定义
#include<signal.h>
typedef void (*Fun(int))
Fun signal(int sig,Fun func)
参数
- Fun:一个函数指针(我自己定义的,有利于阅读)
- sig:准备捕获的信号由sig给出
- func:接收到信号后调用的参数由func给出,func可以为
SIG_IGN
-忽略信号,SIG_DFL
-回复默认行为
作用
- 改变信号的处理方式
kill
定义
#include<sys/types.h>
#include<signal.h>
int kill(pid_t pid,int sig);
参数
- pid:发送进程的pid
- sig:发送的信号
作用
- 向进程发送信号
alarm
定义
unsigned int alarm(unsigned int second);
作用
- 在
second
秒后安排发送一个SIGALRM
信号
pause
定义
#include<unistd.h>
int pause(void);
作用
- 将程序挂起直到有一个信号出现为止
健壮的信号接口
定义
#include<signal.h>
int sigaction(int sig,const sigaction * act,struct sigaction * oact);
sigaction定义
struct sigaction
{
void (*) (int) sa_handler;//信号对应的响应函数
sigset_t sa_mask;//系统在调用响应函数之前阻塞的信号
int sa_flags;//关于信号的选项
};
作用
- 设置信号sig关联动作,如果oact不是空的话,则返回原来的信号动作