多进程间通信学习之信号通信-CSDN博客
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
- 进程对信号的处理方式
- 1、忽略
- 2、默认
- 3、捕捉
- 发送信号的三种情形
- 1、操作系统给进程发送信号
- 2、用户给进程发送信号
- 3、一个进程给另一个进程发送信号
- 信号的本质
- 1、信号是中断的一种软件模拟
- 2、信号是基于操作系统内核实现
- 3、而中断则是基于硬件实现
- 信号处理函数signal函数
#include <signal.h>
typedef void (*sighandler_t)(int);
sighandler_t signal(int signum, sighandler_t handler);
- 发送信号的函数raise函数、kill函数
- raise函数:
#include <signal.h>
int raise(int sig);
#include <sys/types.h>
#include <signal.h>
int kill(pid_t pid, int sig);
#include <unistd.h>
unsigned int alarm(unsigned int seconds);
- 常用的信号
- SIGHUP 该信号在用户
终端关闭
时产生通常是发给和该终端关联的会话内的所有的进程 - SIGINT该信号在用户键入
INTR字符即Ctrl C
时产生内核发送此信号送到当前终端的所有前台进程 - SIGQUIT该信号和
SIGINT
类似但由QUIT字符
Ctrl \
来产生 - SIGILL该信号在一个进程企图执行一条
非法指令
时产生 - SIGSEV该信号在
非法访问
内存时产生如野指针、缓存区溢出 - SIGPIPE当进程往一个
没有读端的管道
中写入时产生代表管道断裂
- SIGKILL该信号用来
结束进程
并且不能被捕捉和忽略 - SIGSTOP:该信号用来
暂停进程
并且不能被捕捉和忽略 - SIGTSTP该信号用于
暂停进程
用户可键入SUSP字符
Ctrl Z
发出这个信号 - SIGCONT该信号让进程进入
运行态
- SIGALRM该信号用于通知进程
定时器时间
已到 - SIGCHLD 当
子进程退出
的时候会给父进程发送
该信号 - SIGUSR1、SIGUSR2该信号
保留
给用户程序使用 - 注意
- 只有
SIGKILL
和SIGSTOP
不能被忽略和捕捉
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |