Linux信号SIGNAL详解

来源:互联网 发布:jdk 7u79 windows x32 编辑:程序博客网 时间:2024/06/03 18:00

1.signal函数的使用

#include <signal.h>void (*signal(int signum, void (*handler)(int)))(int); 参数1:表示捕获什么信号,参数2:表示捕获信号后的处理方式。一般有SIG_ERR(错误返回),SIG_IGN(忽略该信号)、SIG_DFL(按系统默认的方式处理)以及func_handle(用户自定义方式)几种处理方式; 

2.信号列表(参数1可使用的值)

SIGHUP    终止进程    终端线路挂断。*若关闭终端,希望程序继续运行,则忽略该信号*SIGINT    终止进程    中断进程,一般由CTRL+C产生SIGQUIT   建立CORE文件终止进程,并且生成core文件,一般由CTRL+|产生SIGILL    建立CORE文件    非法指令SIGTRAP   建立CORE文件    跟踪自陷SIGBUS    建立CORE文件    总线错误SIGSEGV   建立CORE文件    段非法错误SIGFPE    建立CORE文件    浮点异常SIGIOT    建立CORE文件    执行I/O自陷SIGKILL   终止进程    杀死进程(一般该信号不能忽略)SIGPIPE   终止进程    向一个没有读进程的管道写数据,*若希望写失败能重新尝试时,则忽略该信号*SIGALRM   终止进程    计时器到时SIGTERM   终止进程    软件终止信号SIGSTOP   停止进程    非终端来的停止信号SIGTSTP   停止进程    终端来的停止信号SIGCONT   忽略信号    继续执行一个停止的进程SIGURG    忽略信号    I/O紧急信号SIGIO     忽略信号    描述符上可以进行I/OSIGCHLD   忽略信号    当子进程停止或退出时通知父进程SIGTTOU   停止进程    后台进程写终端SIGTTIN   停止进程    后台进程读终端SIGXCPU   终止进程    CPU时限超时SIGXFSZ   终止进程    文件长度过长SIGWINCH  忽略信号    窗口大小发生变化,*若需要UI显示,则需要处理该信号*SIGPROF   终止进程    统计分布图用计时器到时SIGUSR1   终止进程    用户定义信号1SIGUSR2   终止进程    用户定义信号2SIGVTALRM 终止进程    虚拟计时器到时

附录:

define SIG_ERR    ((__sighandler_t) -1)        /* Error return.  */define SIG_DFL    ((__sighandler_t) 0)        /* Default action.  */define SIG_IGN    ((__sighandler_t) 1)        /* Ignore signal.  */#ifdef __USE_UNIX98    define SIG_HOLD    ((__sighandler_t) 2)    /* Add signal to hold mask.  */#endif/* Signals.  */#define    SIGHUP    1    /* Hangup (POSIX).  */#define    SIGINT    2    /* Interrupt (ANSI).  */#define    SIGQUIT   3    /* Quit (POSIX).  */#define    SIGILL    4    /* Illegal instruction (ANSI).  */#define    SIGTRAP   5    /* Trace trap (POSIX).  */#define    SIGABRT   6    /* Abort (ANSI).  */#define    SIGIOT    6    /* IOT trap (4.2 BSD).  */#define    SIGBUS    7    /* BUS error (4.2 BSD).  */#define    SIGFPE    8    /* Floating-point exception (ANSI).  */#define    SIGKILL   9    /* Kill, unblockable (POSIX).  */#define    SIGUSR1   10   /* User-defined signal 1 (POSIX).  */#define    SIGSEGV   11   /* Segmentation violation (ANSI).  */#define    SIGUSR2   12   /* User-defined signal 2 (POSIX).  */#define    SIGPIPE   13   /* Broken pipe (POSIX).  */#define    SIGALRM   14   /* Alarm clock (POSIX).  */#define    SIGTERM   15   /* Termination (ANSI).  */#define    SIGSTKFLT 16   /* Stack fault.  */#define    SIGCLD    SIGCHLD    /* Same as SIGCHLD (System V).  */#define    SIGCHLD   17    /* Child status has changed (POSIX).  */#define    SIGCONT   18    /* Continue (POSIX).  */#define    SIGSTOP   19    /* Stop, unblockable (POSIX).  */#define    SIGTSTP   20    /* Keyboard stop (POSIX).  */#define    SIGTTIN   21    /* Background read from tty (POSIX).  */#define    SIGTTOU   22    /* Background write to tty (POSIX).  */#define    SIGURG    23    /* Urgent condition on socket (4.2 BSD).  */#define    SIGXCPU   24    /* CPU limit exceeded (4.2 BSD).  */#define    SIGXFSZ   25    /* File size limit exceeded (4.2 BSD).  */#define    SIGVTALRM  26   /* Virtual alarm clock (4.2 BSD).  */#define    SIGPROF    27   /* Profiling alarm clock (4.2 BSD).  */#define    SIGWINCH   28   /* Window size change (4.3 BSD, Sun).  */#define    SIGPOLL    SIGIO    /* Pollable event occurred (System V).  */#define    SIGIO      29   /* I/O now possible (4.2 BSD).  */#define    SIGPWR     30   /* Power failure restart (System V).  */#define SIGSYS        31   /* Bad system call.  */#define SIGUNUSED     31    #define    _NSIG     65    /* Biggest signal number + 1               (including real-time signals).  */#define SIGRTMIN        (__libc_current_sigrtmin ())#define SIGRTMAX        (__libc_current_sigrtmax ())/* These are the hard limits of the kernel.  These values should not be used directly at user level.  */#define __SIGRTMIN    32#define __SIGRTMAX    (_NSIG - 1)
0 0