什么是Linux的信号

Share To Facebook Twitter

信号:是UNIX进程间通信的一种标准方式,在最早期的UNIX系统中已经存在。信号的出现允许内核和其它进程通知进程特定事件的发生。现代UNIX中也存在其它的进程间通信方式,但由于信号相对简单和有效,它们仍然被广泛使用。

  
    信号是最简单的消息,当一个信号被发送时,它没有参数等附加信息,唯有一个整数来表示信号的值。信号的值在所有的UNIX系统中已经标准化了,每一个信 号都有一个名字,它以三个字母SIG开头,对应于特定的事件。例如:SIGKILL表示终止进程;SIGBUS代表硬件故障;SIGCHLD代表子进程状 态改变。
  UNIX中常用的信号有31个,除了前面提到的三个信号外,还有如下信号是文章中用到的,其它的不再一一列出。
SIGSTOP 暂停程序执行
SIGCONT 恢复程序执行
进程对信号的处理
  进程可以对每一个信号设置单独的处理方式,它可以忽略该信号,也可以设置自己的信号处理程序(称为捕捉),或者对信号什么也不做,信号发生的时候执行系统默认动作。
  进程还可以设置对某些信号的阻塞(block)标志。如果一个信号被设置为阻塞,当信号发生的时候,它会与正常的信号一样被递送(deliver)给进程,但只有进程解除对信号的阻塞时才会被处理。
  从一个非阻塞信号被递送给进程到信号得到处理之间的时间间隔,称为信号未决(pending)。
  所有的信号中,有两个信号SIGSTOP和SIGKILL是特殊的,他们既不能被捕捉,也不能被忽略,也不能被阻塞,这个特性保证了系统管理员在任何时候都可以用信号暂停和结束程序。
 
每个信号都有一个编号和一个宏定义名称,这些宏定义可以在signal.h中找到,例如其中有定义#define SIGINT 2。编号34以上的是实时信号,

(责任编辑:IT)

Posted in 未分类

发表评论