linux 信号

来源:互联网 发布:瑜伽初学者软件 编辑:程序博客网 时间:2024/05/19 02:43
  • 当进程接收到一个信号时,就会执行相应的信号函数,如果又接收到相同的信号函,则会存储下来,执行信号的函数不会被打断,直到上一个信号函数退出,才会执行信号函数;如果重复连续接收相同的信号,则只会处理一次,同种信号是不会积累的。但接收的不是同种信号A,则上一个信号函数执行过程中会被打断,直到A信号函数处理完,才继续运行上一个信号
  • 信号函数
    signal(int sig, __sighandler handler);
    sig:信号,常用信号有
    SIGINT:crtl+c,用户按中断键。
    SIGHUP:当终止一个终端时,内核就把这一种信号发送给该终端所控制的所有进程或一个进程组,进程组终止时,向所有进程发送这种信号。
    SIGTERM:终止一个普通的进程。
    SIGCHLD:子进程结束信号,当子进程结束时,向父进程发送该信号,如果父进程调用wati()函数时,父进程就被唤醒;如果父进程没有调用wait()或父进程退出,子进程会成为孤儿进程,由init进程对子进程进行资源回收。
    SIGALRM:定时器信号。一般有alarm(int second)来发送一个定时信号。比如60s,程序执行到alarm函数时,程序会继续运行,但60s时,程序会被中断,并发处理定时信号,处理完后,程序继续在中断时执行。(所谓的异步处理)

  • 第二个参数
    SIG_IGN:当接收到sig的信号时,该信号会被忽略,程序不会被中断,继续执行,除了SIGKILL不能被忽略。
    SIG_DEF:重新恢复系统对信号的默认处理。
    也可以将信号与函数进行关联,当接收到sig信号后,就会执行关联函数。函数退出后,程序继续执行(除非关联函数退出当前进程)

原创粉丝点击