现在的位置: 首页 > 综合 > 正文

信号处理相关函数

2013年10月02日 ⁄ 综合 ⁄ 共 3786字 ⁄ 字号 评论关闭

/* 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).  */

typedef void (*__sighandler_t) (int);

extern __sighandler_t signal (int __sig, __sighandler_t __handler)  __THROW;  //注册信号捕捉函数

/* Fake signal functions.  */
#define SIG_ERR    ((__sighandler_t) -1)        /* Error return.  */
#define SIG_DFL    ((__sighandler_t) 0)        /* Default action.  */
#define SIG_IGN    ((__sighandler_t) 1)        /* Ignore signal.  */
extern int kill (__pid_t __pid, int __sig) __THROW;  //向进程pid发送信号sig

extern int raise (int __sig) __THROW;    //向本进程发送信号sig

extern unsigned int alarm (unsigned int __seconds) __THROW;

extern unsigned int sleep (unsigned int __seconds);

extern int pause (void);

extern void abort (void) __THROW __attribute__ ((__noreturn__));

extern int sigemptyset (sigset_t *__set) __THROW __nonnull ((1));

extern int sigfillset (sigset_t *__set) __THROW __nonnull ((1));

extern int sigaddset (sigset_t *__set, int __signo) __THROW __nonnull ((1));

extern int sigdelset (sigset_t *__set, int __signo) __THROW __nonnull ((1));

extern int sigismember (__const sigset_t *__set, int __signo) __THROW __nonnull ((1));

extern int sigprocmask (int __how, __const sigset_t *__restrict __set,  sigset_t *__restrict __oset) __THROW;

extern int sigpending (sigset_t *__set) __THROW __nonnull ((1));

extern int sigsuspend (__const sigset_t *__set) __nonnull ((1));

extern int sigaction (int __sig, __const struct sigaction *__restrict __act,  struct sigaction *__restrict __oact) __THROW;

struct sigaction
  {
    /* Signal handler.  */
#ifdef __USE_POSIX199309
    union
      {
    /* Used if SA_SIGINFO is not set.  */
    __sighandler_t sa_handler;
    /* Used if SA_SIGINFO is set.  */
    void (*sa_sigaction) (int, siginfo_t *, void *);
      }
    __sigaction_handler;
# define sa_handler    __sigaction_handler.sa_handler
# define sa_sigaction    __sigaction_handler.sa_sigaction
#else
    __sighandler_t sa_handler;
#endif

    /* Additional set of signals to be blocked.  */
    __sigset_t sa_mask;

    /* Special flags.  */
    int sa_flags;

    /* Restore handler.  */
    void (*sa_restorer) (void);
  };

代码示例:

抱歉!评论已关闭.