zoukankan      html  css  js  c++  java
  • 第10章信号总结

    1 常见的信号

     不能被捕捉或忽略的信号:SIGKILL、SIGSTOP 杀死和停止一个进程的可靠方法

     SIGCHLD:进程终止或停止时,SIGCHLD信号发送给其父进程,系统默认忽略此信号

     SIGCONT:发送给处于停止状态需要继续运行的进程

     SIGHUP:终端接口断开连接时,此信号发送给该终端相关的控制进程(会话首进程)

     SIGINT:中断进程信号

     SIGQUIT:退出键

     SIGIO:指示异步I/O事件

     SIGPIPE:写已经读关闭的管道时产生此信号

     SIGPOLL:在一个可轮询设备上发生特定事件时产生此信号

     SIGTTIN:后台进程组试图读控制终端时产生此信号

     SIGTTOU:后台进程组试图写控制终端时产生此信号(可以选择允许后台进程组写控制终端,这种情况下不会产生此信号)

    2 signal函数

     void (*signal(int signo,void (*func)(int)))(int)

     设置信号signo的处理函数,这种设置会被子进程继承,但是exec会破坏这种继承(因为进程空间都被替换了) 

     func常量值:SIG_IGN,SIG_DFL,表示忽略与默认

    3 几个函数

    #include <signal.h>
    int kill(pid_t pid,int signo)
    int raise(int signo)

     kill函数中,pid>0发送给特定进程pid,pid=0发送给同一进程组所有进程,pid<-1发送给进程组|pid|中所有进程,pid=-1发送给所有有权发送的进程

    #include <unistd.h>
    unsigned int alarm(unsigned int seconds)
    int pause()

    3 信号集sigset_t

    #include <signal.h>
    int sigemptyset(sigset_t *set)
    int sigfillset(sigset_t *set)
    int sigaddset(sigset_t *set,int signo)
    int sigdelset(sigset_t *set,int signo)
    int sigismember(sigset_t *set,int signo)
    
    int sigprocmask(int how,const sigset_t *set,sigset_t *oset)

     sigprocmask用来设置和查看当前进程的信号屏蔽字(通过set设置,通过oset返回原来的信号屏蔽字)

     how控制设置方式:SIG_BLOCK:将set中的信号加入当前信号屏蔽字

              SIG_UNBLOCK:将set中的信号从当前信号屏蔽字中删除

              SIG_SETMASK:进程的信号屏蔽字替换为set

    int sigpending(sigset_t *set)

     sigpending函数通过set返回产生了但是被当前进程阻塞的进程

    int sigaction(int signo,struct sigaction *act,struct sigaction *oact)
    
    struct sigaction
    {
        void (*sa_handler)(int);
        sigset_t sa_mask;
        int sa_flags;
        void (*sa_sigaction)(int,siginfo_t *,void *);
    };

     sigaction函数比signal函数提供了关于某一信号的更多的设置(处理信号处理函数外)

     sa_handler是信号处理函数指针

     sa_mask是信号屏蔽字(执行该信号处理函数时,添加到信号屏蔽字中的信号,执行完信号处理函数后再回复信号屏蔽字)

     sa_flags一些处理选项

     sa_sigaction是替代信号处理函数指针,sa_flags中制定了某些选项后将以sa_sigaction指向的函数作为信号处理函数

    #include <setjmp.h>
    int sigsetjmp(sigjmp_buf env,int savemask)
    int siglongjmp(sigjmp_buf env,int val)

     sigsetjmp比setjmp函数增加了savemask标志,指明是否保存当前的信号屏蔽字

    int sigsuspend(const sigset_t *sigmask)

     将进程的信号屏蔽字设置为sigmask并挂起,直到捕捉到某个信号并从信号处理程序返回,结束挂起并恢复信号屏蔽字

  • 相关阅读:
    New Year and Domino 二维前缀和
    java课堂作业(三)
    java课堂作业(二)
    java课堂作业(一)
    java听课笔记(四)
    java听课笔记(三)
    java听课笔记(二)
    java听课笔记(一)
    java零碎
    java继承中的构造方法
  • 原文地址:https://www.cnblogs.com/buptlyn/p/4158592.html
Copyright © 2011-2022 走看看