Linux中的信号简单介绍

信号的机制:

进程A给进程B发送信号,进程B收到信号之前先执行自己的代码,收到信号后,不管执行到程序的什么位置,都要暂停运行去处理信号,处理完毕后再继续执行。 

信号的状态:

信号有三种状态:产生,未决和递达。

信号的产生:

  • 按键:Ctrl+z->将当前正在前台运行的命令挂起(Suspend),并放入后台,但它仍然会保持在内存中。使用fg命令将其恢复到前台继续执行,使用bg命令将其放入后台继续执行。
  •            Ctrl+c->发送中断信号(SIGINT)给当前正在前台运行的命令,强制其终止执行。
  •            Ctrl+/->杀死进程
  • 系统调用:kill,raise,absort
  • 软件条件产生:如:定时器alarm(每一个进程都有一个唯一的定时器)

  • 硬件异常产生:如:段错误,总线错误
  • 命令产生:如:kill命令

未决:产生和递达之间的状态。主要由于阻塞导致该状态

递达:递送并且到达进程。

信号的处理方式:

  • 执行默认动作
  • 忽略信号(丢弃不处理)
  • 捕获信号(调用用户的自定义的处理函数)

默认动作有: 

Term   Default action is to terminate the process.
                        (终止进程)
       Ign    Default action is to ignore the signal.
                          (忽略该信号)
       Core   Default action is to terminate the process and  dump  core  (see
              core(5)).     (内存非法访问)

       Stop   Default action is to stop the process.
                                (停止进程)
       Cont   Default  action  is  to  continue the process if it is currently
              stopped.          (进程继续执行)

 The signals SIGKILL and SIGSTOP cannot be caught, blocked, or ignored.

信号的四要素:

  • 信号的编号
  • 信号的名字
  • 信号的默认处理动作
  • 信号是如何产生的

你可能感兴趣的:(linux,运维,服务器)