linux c socket之signal

161 篇文章 10 订阅
/* 
 * File:   SigAction.c
 * Author: 云守护
 */
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <unistd.h>
#include "DieWithMessage.h"
//中断信号处理函数
void InterruptSignalHandler(int signalType);
int main(int argc, char** argv) {
    //信号处理器
    struct sigaction handler;
    //设置信号处理函数,指派函数处理信号
    handler.sa_handler=InterruptSignalHandler;
    //填充信号掩码
    if(sigfillset(&handler.sa_mask)<0)
        DieWithSystemMessage("sigfillset failed!");
    handler.sa_flags=0;
    //为中断信号设置信号处理者
    if(sigaction(SIGINT,&handler,0)<0)
        DieWithSystemMessage("sigaction failed for SIGINT");
    for(;;)
    {
        //死循环直到收到 SIGINT信号
        handler.sa_flags=0;
        printf("hehe");
        puts("hehe:puts");
        pause();//线程挂起直到收到信号
    }   
    return (EXIT_SUCCESS);
}
void InterruptSignalHandler(int signalType)
{
    puts("Interrupt Received .exiting Program");
    exit(1);
}

/* 
 * File:   SigAction.c
 * Author: 云守护
 */
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <unistd.h>
#include <sys/types.h>
#include <syscall.h>
#include <pthread.h>

 pid_t gettid(void)
 {
	
	return  syscall(SYS_gettid);
 }

void DieWithSystemMessage(const char* msg)
{
	printf("%s",msg);
	printf("\n");
	exit(0);
}
//中断信号处理函数
void InterruptSignalHandler(int signalType);
//gcc test_signal002.c -lpthread

int main(int argc, char** argv) {
    //信号处理器
    struct sigaction handler;
    //设置信号处理函数,指派函数处理信号
    handler.sa_handler=InterruptSignalHandler;
    //填充信号掩码
    sigfillset(&handler.sa_mask);  
    handler.sa_flags=0;
	
    //为中断信号设置信号处理者
    sigaction(SIGINT,&handler,0);
	
	sigaction(SIGUSR2,&handler,0);
	
    for(;;)
    {
        //死循环直到收到 SIGINT信号
       // handler.sa_flags=0;
        printf("hehe");
        puts("hehe:puts");
		kill(getpid(),SIGUSR2);
		puts("gettid");
		kill(gettid(),SIGUSR2);

		pthread_kill(pthread_self(),SIGUSR2);
		raise(SIGUSR2);
	  
        pause();//线程挂起直到收到信号
    }   
    return (EXIT_SUCCESS);
}
void InterruptSignalHandler(int signalType)
{
	printf("InterruptSignalHandler=%d\n",signalType);
	if(signalType ==SIGINT)
	{
		puts("Interrupt Received .exiting Program\n");
		exit(1);
	}else if(signalType ==SIGUSR2)
	{
		puts("Received SIGUSR2\n");
	}
   
}
 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值