Linux信号机制的例子
linux 信号机制的例子,分析程序,了解 kill() 函数的使用,信号的捕获相关问题
代码分析
程序分析
void (*signal(int signum, void (*handler)(int)))(int);
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
void my_func(int sign_no)
{
if (sign_no == SIGINT)
{
printf("I have get SIGINT\n");
//该信号在用户键入INTR字符(通常是ctrl+c)时发出
}
else if (sign_no == SIGQUIT)
{
printf("I have get SIGQUIT\n");
//该信号和SIGINT类似,但右quit字符(通常是ctrl+\)来控制
}
sleep(10);
}
int main()
{
printf("Waiting for signal SIGINT or SIGQUIT...\n");
signal(SIGINT, my_func);
signal(SIGQUIT, my_func);
//这里第二个参数是自定义的信号处理函数指针(也可以是SIG_IGN:忽略该信号,SIG_DFL:采用系统默认的方式处理信号)
signal(SIGKILL, my_func);
signal(SIGSTOP, my_func);
//SIGKILL与SIGSTOP信号不能被捕获和忽略
signal(SIGUSR1, SIG_IGN);
//这里第二个参数是 SIG_IGN:忽略该信号
signal(SIGUSR2, SIG_DFL);
//这里第二个参数是 SIG_DFL:采用系统默认的方式处理信号)
kill(getpid(), SIGINT);
while (1);
exit(0);
}
note:用kill命令向一个进程发送信号,语法是“kill 信号标识 进程ID
执行结果
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 不听话的兔子君!