Linux C 的信号处置, 在单线程和多线程的程序中,有较大区别.
以下通过程序示例演示单线程中的信号捕获.
#include <stdio.h>
#include <unistd.h>
#include <signal.h>
int kvalue = 0;
void sigroutine(int dunno)
{
printf("receive signal %d.\n", dunno);
/* 让这个回调函数对主程序的运行产生影响. */
kvalue ++;
}
int main()
{
/* 注册信号. sigroutine回调函数时你需要自行定义的. */
signal(SIGUSR1, sigroutine);
while(1) {
printf("main task running. kvalue = %d .\n", kvalue);
sleep(1);
}
return 0;
}
/*
以上code编译成可执行程序signaltest1. 然后运行.
在shell中输入命令killall -s SIGUSR1 signaltest1
可能通过看signaltest1的打印观察实际函数调用过程.
更丰富的Linux应用信号请自行搜索.
*/