本文详细介绍Linux操作系统的信号机制详细介绍
信号是unix中所使用的进程通信的一种最古老的方法。系统使用它来同志一个或多个进程异步事件的发生。
linux系统库bits/signum.h对信号名作了定义:
linux的大多数信号是提供给内核的,仅有少数几种信号可以在信号间发送。
.SIGHUP 当终止一个终端时,内核就把这种信号发送给该终端所控制的所有进程。
.SIGINT 当一个用户按下中断键(ctrl+c)后,内核就向该终端用关联的所有进程发送这个信号。
.SIGQUIT 当用户按下(ctrl+),内核就向该终端用关联的所有进程发送这个信号。
.SIGILL 当一个进程企图执行一条非法指令时,内核就发送这个信号。
.SIGFPE 当产生浮点错误时,内核就发送这个信号。
.SIGKILL 这是一个非常特殊的信号,他可以从一个进程发送到另一个进程,使接收到该信号的进程终止。内核偶然也发送这种信号。
.SIGALRM 当一个定时器到时的时候,内核就发送这个信号。
.SIGSTOP 子进程结束信号.UNIX用它来实现系统调用exit(),wait();
信号的处理
unix的系统调用signal()用于接受一个指定的信号,并可以指定相应的处理方法。
在linux系统库signal.h中,它的说明如下:
signal(int sig,sighandler_t handler);
sig用于指定信号类型。handle是用于处理该信号的函数。
handle还可以是:
.SIG_IGN 忽略这个信号。
.SIG_DFL 恢复对这个信号的默认处理。
例如:
#include
#include
#include
main(){
signal(SIGINT,SIG_IGN);
printf("hello!n");
sleep(10);
printf("hellon");
}上面的代码忽略了SININT信号。
又例如:
#include
#include
#include
int catch(int sig);
main(){
signal(SIGINT,catch);
printf("hello!n");
sleep(10);
printf("hello!n");
}
int catch(int sig){
printf("catch signaln");
return 1;
}当用户按下ctrl+c时,进程被中断,catch()被执行.中断处理函数处理完毕后,转回断点执行下面的指令。
当编写自己的中断处理函数时,注意下面两点:
1.信号不能打断系统调用。
2.信号不能打断信号处理函数。
责编:豆豆技术应用
- Linux/Unix新闻
- Linux/Unix入门
- Linux/Unix命令
- Linux/Unix安装
- Linux/Unix编程
- Linux/Unix管理
- Linux/Unix桌面
- Linux/Unix内核
- Linux/Unix软件
- Linux/Unix发行版
- redhat/Fedora
- Ubuntu Linux
- IBM AIX
- FreeBSD
- Solaris
- NetBSD
- SCO Unix
- find基本用法
- ldd命令原理及用法例子
- su和sudo命令的区别与使用技巧
- Linux操作系统下的dd命令技巧
- 关于Top命令的参数详解
- 关于Tar命令的使用
- SSH实用技巧及常用命令使用
- Linux后台执行命令
- VI命令使用技巧集锦
- Vmstat命令列出的属性详解
- 如何查看及修改文件读写权限
- 最大可存储的单文件容量
- ext2/ext3文件系统介绍
- 常用压缩格式的压缩解压方法
- Linux系统的引导过程详细解析
- Configure参数解释说明
- Linux下硬盘和分区的命名方法
- 硬链接与软链接的区别
- 权限和所有权模型
- 存储设备的两种表示方法