之前说过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编译一下, 然后运行一下, 就可以玩这两个函数了。



本文转载:CSDN博客