signal linux

Linux下signal介绍与其引用

  在真实的项目中,后台服务程序不受终端控制,常驻内存中,没有互交的界面。但是程序会产生数据
   周期性或通过时间唤醒的方式执行任务。
如何让程序在后台运行?
   (1)在指令后面+&符号
   (2)采用fork()函数,即创建一个进程执行程序。

可靠信号,不可靠信号,阻塞信号以及信号处理函数

  程序在运行过程中,用Ctrl+c、kill中止的本质是向程序发送信号,程序对这两个信号的缺省行为是程序中止运行。在程序中,可以捕获函数,编写信号处理函数,执行代码。

signal(SIGINT,func);//采用键盘终端ctrl+c
signal(SIGTERM,func);//采用kill进程编号通知程序

当然signal函数的第一个参数也可以用信号列表来表示。
意思是如果遇到了ctrl+c就会执行func函数。

信号的基本概念

  软中断信号(signal,又简称为信号)用来通知进程发生了异步事件。进程之间可以互相通过系统调用kill发送软中断信号。内核也可以因为内部事件而给进程发送信号,通知进程发生了某个事件。注意,信号只是用来通知某进程发生了什么事件,并不给该进程传递任何数据。
  收到信号的进程对各种信号有不同的处理方法。处理方法可以分为三类:第一种是类似中断的处理程序,对于需要处理的信号,进程可以指定处理函数,由该函数来处理。第二种方法是,忽略某个信号,对该信号不做任何处理,就象未发生过一样。第三种方法是,对该信号的处理保留系统的默认值,这种缺省操作,对大部分的信 号的缺省操作是使得进程终止。进程通过系统调用signal来指定进程对某个信号的处理行为。
  在进程表的表项中有一个软中断信号域,该域中每一位对应一个信号,当有信号发送给进程时,对应位置位。由此可以看出,进程对不同的信号可以同时保留,但对于同一个信号,进程并不知道在处理之前来过多少个。

几个重要的信号

SIGKILL 无条件强制杀死进程
SIGINT    ctrl+c

信号有什么用?

  signal(SIGINT,func)可以让程序体面的退出。

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