主线程阻塞一些信号,创建独立线程使用sigwait去获得这些信号,对他们调用自己的信号处理函数
主要有
SIGTERM(kill命令产生) : 存储并同步(到磁盘)程序的重要数据,释放资源、程序退出
SIGINT SIGUSR1 SIGUSR2:自定义操作或同上
SIGPIPE(像对端关闭的管道或socket写入时产生,不处理程序退出): 忽略
SIGHUP(终端退出产生,不处理程序退出): 忽略
SIGCHILD(子进程退出产生,默认忽略): waitpid 防止子进程退出后变为僵尸进程
另外信号处理函数尽量不要调某些库函数,像printf()和malloc()之类的标准库函数,它们会使用全局的数据(比如malloc()需要使用进程的堆数据结构)是不可重入的,即使加锁也无法解决,加锁可以使得库函数Tread-safe,但是无法解决可重入。
SIGKILL(kill -9产生) SIGSTOP 不能捕获