Outline
- 1.信号的概念
- 2.信号使用入门
=================================================================================================
1. 信号的概念在Unix系统中使用signal来实现异步通知。例如进程1正在运行,此时另一进程或系统希望使用某种方法通知进程1某个事件发生了(如发现插入了u盘),其中的一种手段就是使用信号机制。信号的产生主要有以下几种方式:
a)用户按键,如ctrl C
b)硬件异常,如引用无效内存
c)调用kill函数或者命令
d)软件发出信号
信号的处理有以下几种方式:
a)忽略
b)捕捉并处理
c)采用系统默认动作
信号在Unix系统中以SIG开头,为正整数,0有特殊用途。
SIGKILL \ SIGTERM \ SIGINT区别
这三个信号通常用来终止进程,在bash中,分别是kill -9 、 kill、ctrl C发出的信号,看似相同,但其实差别很大,请参考
2. 信号使用入门 - signal()
- #include <signal.h>
-
#include <unistd.h>
-
#include <stdio.h>
-
-
typedef void (*SIG_HANDLER)(int);
-
-
static void sig_usr(int signo);
-
-
int main()
-
{
-
if (signal(SIGUSR1, sig_usr) == SIG_ERR)
-
printf("can't catch SIGUSR1");
-
if (signal(SIGUSR2, sig_usr) == SIG_ERR)
-
printf("can't catch SIGUSR2");
-
while (1)
-
sleep(1);
-
}
-
-
static void sig_usr(int signo)
-
{
-
if (signo == SIGUSR1)
-
printf("SIGUSR1 captured.\n");
-
else if (signo == SIGUSR2)
-
printf("SIGUSR2 captured.\n");
-
}
在终端中产生信号:
- deepsky@Debian:~$ kill -USR1 3619
-
deepsky@Debian:~$ kill -USR2 3619
输出:
- SIGUSR1 captured.
-
SIGUSR2 captured.
阅读(1220) | 评论(0) | 转发(0) |