linux学习笔记10-发送信号

发送信号

kill函数,向其他进程发送信号

//kill 所需头文件
#include <sys/types.h>
#include <signal.h>

//参数1是进程id 参数2是信号类型,如SIGINT
int kill(pid_t pid, int sig);

使用kill函数

#include <stdio.h>
#include <stdlib.h>

#include <sys/types.h>
#include <signal.h>

int main(int argc,char *argv[])
{
	if(argc < 2)
	{
		printf("no param!");
		return -1;
	}
	int pid = atoi(argv[1]);   //进程id
	kill(pid,SIGINT);          //向这个进程id发送SIGINT信号
	return 0;
}

raise函数,向自己发送信号

#include <signal.h>
//指定信号
int raise(int sig);

raise函数使用

#include <stdio.h>
#include <stdlib.h>

#include <signal.h>

int main(int argc,char *argv[])
{
	raise(SIGINT);           //发送SIGINT信号
	printf("hello signal!\n");
	return 0;
}

alarm函数

#include <unistd.h>

//参数为秒数
unsigned int alarm(unsigned int seconds);

alarm使用

#include <stdio.h>
#include <stdlib.h>

#include <signal.h>

void signal_handler(int sign)
{
	switch(sign)
	{
		case SIGINT:
			printf("signal SIGINT!\n");
			sleep(5);
		break;
		case SIGALRM:
			printf("sigalrm 5 seconds!\n");
			alarm(10);                  //这里实现每间隔10秒触发一次
		break;
	}
}

int main(int argc,char *argv[])
{
	signal(SIGINT,signal_handler);    //注册SIGINT信号,触发时调用signal_handler函数
	signal(SIGALRM,signal_handler); 
	alarm(10);                        //10秒后触发SIGALRM信号(只执行一次)        
	int count = 0;
	while(count < 50)
	{
		printf("print %d\n",++count);
		sleep(1);
	}
	return 0;
}


秋风 2016-11-25