通过man 7 signal
可以查看信号的详细信息。
每一个信号都有一个默认的处理动作,决定了进程接受到该信号后如何处理。信号的5种默认处理动作:
各个信号的默认行为如上图。其中SIGKILL和SIGSTOP不能被捕捉、堵塞和忽略。
函数说明:给进程发送信号
头文件:
#include
#include
函数原型:
int kill(pid_t pid, int sig);
函数参数:
pid—进程号或者某个进程组的编号。
sig—信号的编号或者宏值。
如果信号的值为0,不会发送任何信号,可以用来检查该进程ID或进程组ID是否存在。
返回值:
如果至少一个信号被发送成功,返回0;如果错误返回-1,并且全局变量errno被设置成相应的值。
函数说明:给调用者发送一个信号,等价于kill(getpid(), sig)
。
头文件:
#include
函数原型:
int raise(int sig);
函数参数:
sig—信号的编号或者宏值。
返回值:
成功返回0,失败返回非0.
函数说明:发送SIGABRT信号(值为6)给当前进程,杀死当前进程。
头文件:
#include
函数原型:
void abort(void);
等价于kill(getpid(), SIGABRT)
。
函数说明:安排一个定时器,到时间了给进程发一个alarm信号。每一个进程都有且只有唯一的一个定时器。该函数只能定时一次。
头文件:
#include
函数原型:
unsigned int alarm(unsigned intseconds);
函数参数:
这个函数会在指定的seconds秒后产生一个SIGALRM信号给当前进程。该信号的默认动作是终止进程。
如果参数为0,代表任何定时器都无效(包括之前设置的定时器)。
返回值:
alarm(5); //返回0
sleep(2);
alarm(6); //返回3,重新从0开始数秒
函数说明:设置内部定时器的值,替代alarm函数。精度为微秒,可实现周期性定时。
头文件:
#include
函数原型:
int setitimer(int which, const struct itimerval *restrict value,struct itimerval *restrict ovalue);
函数参数:
which取值:ITIMER_PROF、 ITIMER_REAL、TIMER_VIRTUAL。
new_value:设置定时器的属性。
//定时器结构体
struct itimerval {
struct timeval it_interval; //定时事件
struct timeeval it_value; //延迟多长时间启动定时器
}
//时间结构体
struct timeval {
time_t tv_sec; //秒
suseconds_t tv_user;//微秒
}
new_value:记录上一次定时器的属性,一般指定NULL,不使用。
返回值:
成功返回0,失败返回-1.
struct itimerval new_value;
//设置2秒定时
new_value.it_interval.tv_sec = 2;
new_value.it_interval.tv_usec = 0;
//设置3秒后启动定时器
new_value.it_value.tv_sec = 3;
new_value.it_valuel.tv_usec = 0;
setitimer(TIMEER_REAL, &new_value, NULL); //非阻塞