信号是软件中断。
信号提供了一种处理异步事件的方法。
每个信号都有一个名字,并且这些名字都是以SIG开头。可以通过包含<signal.h>来调用这些信号。
不存在编号为0的信号。
kill函数,可以向自身发送信号,也可以向其他进程发送信号
raise是向进程自身发送信号
#include <sys/types.h>
#include <signal.h>
int kill(pid_t pid, int signo)
int raise(int signo)
ararm函数,设置时间到时,产生SIGALRM信号
#include <unistd.h>
unsiged int alarm(unsigned int seconds)
seconds:经过了指定的秒数后会产生信号SIGALRM
pause函数使调用进程挂起直至捕捉到一个信号。
#include <unistd.h>
int pause(void)
常用signal函数
函数原型是
void (*signal(int , void (*func)(int))) (int);
由于这个函数看上去比较复杂,所以现在来分解一下
void (*signal)(int);
以上是一个函数指针
void (*signal())(int);
以上用signal()代替signal, 所以可以看成signal这个函数执行之后,返回一个函数指针作为返回值
void (*signal(int, void (*func)(int))) (int)
以上可以看成是signal函数带两个参数,一个是int,一个是void (*func)(int),而signal函数的返回值是一个函数指针, 这个函数指针指向一个带
一个整型参数,并且返回值是void的一个函数。
使用方法
定义一个信号函数
static my_sig(int);
然后这样写:signal(SIGNAL_FOR_YOU, my_sig)
其中SIGNAL_FOR_YOU,是某个信号,这个信号是什么由用户所决定,例如:SIGUSR1