Android 信号处理面面观 之 信号定义、行为和来源

传统 Unix系统的信号定义和行为

所有的符合Unix规范(如POSIX)的系统都统一定义了SIGNAL的数量、含义和行为。 作为Linux系统,Android自然不会更改SIGNAL的定义。在Android代码中,signal的定义一般在 signum.h (prebuilt/linux-x86/toolchain/i686-linux-glibc2.7-4.4.3/sysroot/usr/include/bits/signum.h)中:

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

我们知道,信号处理的方式一般有三种:

1. 忽略  接收到信号后不做任何反应。

2. 自定义  用自定义的信号处理函数来执行特定的动作

3. 默认  接收到信号后按默认得行为处理该信号。 这是多数应用采取的处理方式。


而 传统 UNIX系统对以上信号的默认处理如下图所示 (来自 APUT ):

Android 信号处理面面观 之 信号定义、行为和来源


Android 系统 信号处理的行为

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wysywf.html