信号(未完)

来源:互联网 发布:梦幻花园网络无法连接 编辑:程序博客网 时间:2024/06/06 03:47
#名称: 信号
#参考资料: Unix高级编程
#作者 一路向北
#时间 2013-8-13 14:57
#版本 RetHat 4.1.2-48
#内核版本 2.6.18-194.
#说明: 由于用到相关的知识,所以从第十章开始写
引言:
信号是软件中断,它提供了一种处理异步事件的方法,具体的表面上的操作方法是
终端用户键入中断键,则会通过信号机构停止一个程序。


1、S V R 4和4 . 3 + B S D均有3 1种不同的信号,都是以SIG开头,
特别注意:
这些信号被设为整数但是没有0,0是要有特殊作用的,所以不用,在kill函数中会提到
kill(2)桉树可以将信号发送给另一个进程或者进程组。但是有限制,接收信号进程和发送信号进程的所有者必须相同,或者发送信号进程的所有者必须是超级用户
kill(1)命令将信号发送给其他进程。此程序是kill函数的界面,用来终止一个失控的后台进程
当检测到某种软件条件已经发生,并将其通知有关进程时也产生信号。这里并不是硬件条件,而是软件条件如被0除。


信号的作用:
信号是典型的异步事件
产生信号的时间对进程而言属于随机出现的。
进程在测试到一个变量(eg:errno)来判断是否发生一个信号,之后必须告诉内核,某信号已经发生了,
赶紧做下面的三件事情中的一件事情:
(1)忽略此信号   大多数的信号都可以用这种方法除了SIGKILL和SIGSTOP,请想想为什么?
(2)捕捉信号    为了做到这一点,还需要内核多出点力,在该信号发生时调用一个用户函数,可以在用户函数中
执行对这个事件的操作。
eg:如果编写一个命令解释器,当用户用键盘产生中断信号时希望返回到主循环,终止系统增在为该用户执行的命令。
如果捕捉到SIGCHLD信号,则表示子进程已经终止。所以此信号的捕捉函数可以调用waitpid以取得该子进程的ID以及其种子状态。
(3)执行系统默认动作,对大多数的信号系统的默认动作是终止该进程
在/usr/include中定义的各信号的名字和使用方法
English name 中文名 缺省 作用或使用方法
SIGABRT 夭折信号 终止w/core 进程调用abort函数时产生这种信号
SIGALRM 闹钟信号 终止 由alarm函数设置的时间已经超过后产生此信号
SIGINT 按某终端时产生 在终端上岸DELETE键产生的中断信号,停止一个
已经失去控制程序的方法
SIGSEGV 硬件异常 除数为0.无效的存储访问等。这些条件由硬件
检测到并通知内核,内核产生适当信号
SIGBUS 硬件故障 终止w/core
SIGCHLD 子进程状态改变 忽略
SIGCONT 使暂停进程继续 继续/忽略
SIGEMT 硬件故障 终止w/core
SIGFPE 算术异常 终止w/core
SIGHUP 连接断开 终止
SIGILL 非法指令 终止w/core
SIGINFO 键盘状态请求 忽略
SIGINT 终端中断符 终止
SIGIO 一部I/O终止/忽略
SIGIOT 硬件故障 终止w/core
SIGKILL 终止 终止
SIGPIPE 写至无读进程管道 终止
SIGPOLL 可轮询事件(poll) 终止
SIGPROF 梗概时间超时(setitimer) 终止
SIGQUIT 终端退出符 终止w/core
SIGPWR 电源失效/再启动 忽略
SIGSEGV 无效存储访问 终止w/core
SIGSTOP 停止 暂停进程
SIGSYS 无效系统调用 终止w/core
SIGTERM 终止 终止
SIGTRAR 硬件故障 终止w/core
SIGTSTP 终端挂起符 停止进程
SIGTTIN 后台从控制tty读 停止进程
SIGTTOU 后台想控制tty写 停止进程
SIGURG 紧急情况 忽略
SIGUSR1 用户定义信号 终止
SIGUSR2 用户定义信号 终止
SIGVTSLRM 虚拟时间闹钟(setitimer) 终止
SIGWINCH 终端窗口大小 忽略
SIGCPU 超过CPU限制(setrlimit) 终止w/core
SIGXFSZ 超过文件长度限制 终止w/core
终止w/core:表示在进程当前工作目录的core文件中复制了该进程的存储图像