kill -l
常用的信号有 2 ,9 , 10 ,12
其中,1-31是不可靠信号(可能丢失);35-64是可靠信号(操作系统保证不丢失)。
USR1 USR2 可以用户自定义
man 7 signal
信号的实现
1.Linux/Unix系统的信号机制最简单的接口就是signal函数
2. sigaction函数的功能是检查或修改与指定信号相关联的处理动作(或者同时执行这两种操作)。此函数取代了早期unix/linux版本使用的signal函数。
例程:
#include <stdio.h>
#include <signal.h>
#include <string.h>
#include <unistd.h>
void HandleSignalFunc(int signo,siginfo_t *info,void *none)
{
int i;
printf(" got signal %d\n", signo);
printf(" append info %d\n", info->si_value.sival_int);
for(i = 0; i < 5; i++) {
printf("i = %d\n", i);
sleep(1);
}
}
int main(void)
{
int i = 0;
//信号处理函数结构
struct sigaction act, oldact;
//清空结构体以及掩码
memset(&act, 0x00, sizeof(struct sigaction));
//定义信号处理函数
act.sa_sigaction = HandleSignalFunc;
sigaddset(&act.sa_mask, SIGQUIT); //若在SIGINT(Ctrl+C)的信号处理函数执行过程中,本进程收到信号SIGQUIT(Ctrl+\),将阻塞该信号,知道HandleSignalFunc执行结束才会处理信号SIGQUIT.
sigaddset(&act.sa_mask, SIGUSR1);
act.sa_flags = SA_RESETHAND | SA_NODEFER | SA_SIGINFO;
//act.sa_flags = 0;
if(-1 == sigaction(SIGINT, &act, &oldact))
{
perror("sigaction");
exit(0);
}
if(-1 == sigaction(SIGUSR1, &act, &oldact))
{
perror("sigaction");
exit(0);
}
while(1)
{
sleep(1);
printf("sleeping %d\n", i);
i++;
}
}
友情链接