1、信号的概述
(1)What(什么是信号)
信号是一种消息处理机制,其本质是一个整数
(2)Why(信号的作用)
可用于实现进程通信、进程同步、进程控制(进程创建、进程退出、进程回收)、异常处理和事件通知(通过注册信号处理函数,实现事件驱动型编程)
(3)Which(有哪些信号)
kill - l:可以查看所有的标准信号
man signalNum signal:查看signalNum的信号详情
(4)信号默认处理动作
- Term:进程终止
- Core:进程终止,并生成用于gdb调试用的core文件
- Stop:暂停进程运行
- Cont:让暂停的进程继续运行
- Ign:默认忽略该信号
(5)信号的状态
- 产生:键盘输入、函数调用、shell命令都可以产生信号
- 未决:信号产生了,但是还没有被处理
- 递达:信号被处理了
2、信号相关函数
(1)kill函数
用于向指定的进程或进程租发送sig信号
int kill(pid_t pid, int sig)
pid 指定接收信号的进程 ID。如果 pid 大于 0,信号被发送到指定的进程;如果 pid 等于 0,信号被发送到与发送进程属于同一进程组的所有进程;如果 pid 等于 -1,信号被发送到系统中除了进程 0 和自身进程以外的所有进程;如果 pid 小于 -1,信号被发送到 pid 的绝对值所指定的进程组中的所有进程。
(2) raise函数
用于向自身进程发送信号sig信号
int raise(int sig);
成功时返回 0,失败时返回非 0 值。
(3) abort函数
用于使当前进程异常终止
void abort(void);
它会向进程发送 SIGABRT 信号,默认情况下会导致进程产生核心转储(core dump)并终止
(4) alarm函数
用于设置一个定时器,在指定的时间间隔后向当前进程发送 SIGALRM 信号
unsigned int alarm(