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

被折叠的 条评论
为什么被折叠?



