Linux信号处理的一般方法

主线程阻塞一些信号,创建独立线程使用sigwait去获得这些信号,对他们调用自己的信号处理函数

主要有 

SIGTERM(kill命令产生) : 存储并同步(到磁盘)程序的重要数据,释放资源、程序退出

SIGINT SIGUSR1 SIGUSR2:自定义操作或同上

SIGPIPE(像对端关闭的管道或socket写入时产生,不处理程序退出): 忽略

SIGHUP(终端退出产生,不处理程序退出): 忽略

SIGCHILD(子进程退出产生,默认忽略): waitpid 防止子进程退出后变为僵尸进程


另外信号处理函数尽量不要调某些库函数,像printf()和malloc()之类的标准库函数,它们会使用全局的数据(比如malloc()需要使用进程的堆数据结构)是不可重入的,即使加锁也无法解决,加锁可以使得库函数Tread-safe,但是无法解决可重入。

SIGKILL(kill -9产生) SIGSTOP 不能捕获

你可能感兴趣的:(linux,信号处理)