SIGQUIT:停止
SIGILL:illegal instruction
SIGABRT:Abort
SIGFPE:Float point exception
SIGPIPE:Broken pipe
SIGBUS:总线错误(访问mem)
SIGSEGV:段错误
一般情况下,程序应对上述信号进行处理,一方面探测程序bug,另一方面防止一些异常信号促使程序不能正常运行。
信号处理
- linux对每种信号都规定了默认动作,具体可参考man 7 signal
- SIGCHLD 忽略(注意:需要注意的是,虽然进程对于 `SIGCHLD`的默认动作是忽略,但是还是显示写出来,才能有效(不显示写出来无效);
signal(SIGCHLD, SIG_IGN)
,这样子进程直接会退出,不会变成僵尸。) - 实时信号结束进程。
- 如果不想程序采用默认动作处理进程,需要捕捉函数(为想要特殊处理的函数指定信号处理函数)。
- 如发生SIGALARM或SIGPIPE,进行超时处理即可,不必终止进程。此外若想发生信号时做特殊处理也应指定信号处理函数,如发生段错误时,提示用户等。