signal信号,不是信号量!!!!

本文深入探讨了Linux内核的信号机制,解释了信号的概念、类型及其在进程间通信的作用。通过实例展示了如何使用signal()函数配置信号处理函数,以及如何通过系统调用如kill()、pause()和alarm()来管理和响应信号。

Signal信号不是信号量!

/*ignal.c

 *

 * Created on: 2014-12-11

 *     Author: Administrator

 */

 

#include<stdio.h>

#include<stdlib.h>

#include<string.h>

#include<signal.h>

void handle(int sig)

{

       printf("i am in handle\n");

       switch (sig)

       {

       case 1:printf("signal up \n");break;

       case 2:printf("signal init \n");break;

       case 3:printf("signal quit \n");break;

       }

       return ;

//     return 0;

}

int main(int argc ,char *argv[])

         {

int m=0;

       printf("pid:%d\n",getpid());

//     printf("signal begin\n");

       signal(SIGHUP,handle);

       signal(SIGINT,handle);

       signal(SIGQUIT,handle);

       for(;;);

 

return 0;

}

感觉信号就有点像java的监听器的节奏,内核随时都在监听当前进程是否有发送信号量,如果有发送信号量就调用对应的函数。

下面是在signal.h中复制的一部分系统信号:

 

#define  SIGHUP/* hangup */

#define  SIGINT 2  /* interrupt */

#define  SIGQUIT  3  /* quit */

#define  SIGILL 4  /* illegal instruction (not reset when caught) */

#define  SIGTRAP  5  /* trace trap (not reset when caught) */

#define  SIGABRT 6 /* used by abort */

#define  SIGEMT 7  /* EMT instruction */

#define  SIGFPE 8  /* floating point exception */

#define  SIGKILL  9  /* kill (cannot be caught or ignored) */

#define  SIGBUS 10 /* bus error */

 

KILL(INT PID,INT SIG)

杀死进程,网上参考:

该 系统调用可以用来向任何进程或进程组发送任何信号。如果参数pid是正数,那么该调用将信号sig发送到进程号为pid的进程。如果pid等于0,那么信 号sig将发送给当前进程所属进程组里的所有进程。如果参数pid等于-1,信号sig将发送给除了进程1和自身以外的所有进程。如果参数pid小于- 1,信号sig将发送给属于进程组-pid的所有进程。如果参数sig为0,将不发送信号。该调用执行成功时,返回值为0;错误时,返回-1,并设置相应 的错误代码errno。下面是一些可能返回的错误代码:

 

pause(); 

阻塞住进程一直到收到注册的信号为止。

 

Alarm()

类似java的定时器。

注意:alarm只设定一个闹钟,时间到达并执行其注册函数之后,闹钟便失效。如果想循环设置闹钟,需在其注册函数中在调用alarm函数。

 

强大的定时器:http://baike.baidu.com/view/6339376.htm

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值