Linux操作系统中常见的信号有
- SIGHUP:挂起进程
- SIGINT:中断进程
- SIGQUIT:退出进程和生成核心文件
- SIGILL:非法指令
- SIGTRAP:跟踪/断点陷阱
- SIGABRT:异常终止
- SIGBUS:总线错误
- SIGFPE:浮点异常
- SIGKILL:ss进程,该信号不能被阻塞,处理或忽略,一旦接收就会ss进程
- SIGUSR1、SIGUSR2:用户自定义信号
- SIGSEGV:无效内存引用
- SIGPIPE:管道破碎:写到一个没有读者的管道
- SIGALRM:实时定时器超时
- SIGTERM:终止进程
- SIGCHLD:子进程已经停止或终止
- SIGCONT:如果进程已经停止,那么继续运行进程
- SIGSTOP:停止执行进程
- SIGTSTP、SIGTTIN、SIGTTOU:停止进程的运行
一个进程接收到一个信号后,可以有三种方式处理
- 忽略这个信号。
- 捕捉这个信号。一旦一个进程决定要捕捉某种信号,就需要提供一个函数,这个函数被称为信号处理程序。当这种信号发给该进程时,内核就运行该信号处理程序。
- 执行默认操作。
系统如何将一个信号通知到进程
- 内核会修改进程上下文信息,并设置标识表明收到信号。
- 当进程再次被调度执行时,它会先检查是否有未处理的信号,如果有,就调用相应的信号处理函数。
- 如果没有为该信号指定处理函数或者信号被阻塞,那么就执行系统默认的操作,可能是忽略、停止进程或者终止进程等。