之前说过kill命令, 我们也知道了, kill命名并没有杀死的意思, 而仅仅是发送信号, 今天, 我们继续学习它的函数形式。 raise这个单词的意思太多, 其中的一个意思是提出、抛出、发出, 实际上raise函数也是发出信号的。 kill和raise有如下等价关系:
kill(getpid(), xxx) 等价于rase(xxx), 意思是, raise函数就是向当前进程发信号的。
好吧, 我们直接看代码:
#include <stdio.h>
#include <signal.h>
void sig_callback1()
{
printf("signal: SIGUSR1\n");
}
void sig_callback2()
{
printf("signal: SIGUSR2\n");
}
void sig_haha()
{
printf("heng, i do not terminate the process, so what?\n");
}
int main()
{
// 用户定义信号
if(SIG_ERR == signal(SIGUSR1, sig_callback1))
{
printf("error1\n");
return 1;
}
// 用户定义信号
if(SIG_ERR == signal(SIGUSR2, sig_callback2))
{
printf("error2\n");
return 1;
}
// SIGTERM信号的默认操作是杀死进程, 但程序员完全可以改变这个默认操作, 说白了, 就是改变信号到函数的映射关系
if(SIG_ERR == signal(SIGTERM, sig_haha))
{
printf("error3\n");
return 1;
}
while(1)
{
getchar();
kill(getpid(), SIGUSR1); // 向当前进程发送SIGUSR1消息
getchar();
raise(SIGUSR2); // 向当前进程发送SIGUSR2消息
}
return 0;
}
gcc编译一下, 然后运行一下, 就可以玩这两个函数了。