进程通信-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不是空的话,则返回原来的信号动作
本文详细介绍了进程间的信号通信机制,包括各种信号的名称及其用途,如SIGKILL用于强制终止进程,SIGINT用于中断终端等。同时介绍了信号处理的相关函数,如signal用于改变信号处理方式,kill用于向进程发送信号,alarm用于定时发送信号,pause用于等待信号到达。

被折叠的 条评论
为什么被折叠?



