信号
信号是在软件层次上对中断机制的一直模拟,是一种异步通信方式
linux内核通过信号通知用户进程, 不同的信号类型代表不同的事件
进程对信号有不同的响应方式
缺省方式
忽略信号
捕捉信号
SIGKILL和SIGSTOP这两个信号量 级别很高 只能执行默认操作 不能被捕捉和忽略
kill [-signal] pid
pid 发送对象(进程号或进程组 -1 代表除当前进程和int进程之外 其他都发送该信号)
-signal 可指定信号
向一个进程发送信号(默认发送15信号 也就是结束进程)
killall [-u user | prog]
prog指定进程号
-u user 指定用户名
默认发送信号15
发送信号
#include <unistd.h>
#include <signal.h>
int kill(pid_t pid, int sig);
int raise(int sig);(只能向当前进程发信号)
成功返回0 失败返回EOF
pid 接收进程的进程号· 0代表同组进程 -1代表所有进程
sig 信号类型
·
int alarm(unsinged int seconds)
成功返回上一个定时器的剩余时间 失败返回EOF
seconds 定时器的时间 如果值为0 代表取消这个定时器
一个进程中只能设置一个定时器 时间到时 产生SIGALRM(默认结束进程)
int pause(void)
进程一直阻塞 直到被信号中断
被信号中断后 返回-1 error为EINTR
设置信号响应方式
#include <unistd.h>
#include <signal.h>
void (*signal(int signo, void (*handler)(int)))(int);
成功返回原先的信号处理函数 失败返回 SIG_ERR
sigo 要设置的信号类型
handler 指定的信号处理函数: SIG_DFL代表缺省方式
SIG_IGN代表忽略信号
代码示例