Linux信号
Last updated
Last updated
Linux编程的一个特点就是发送和接收信号的思想。信号是一种被用于向进程通告异步事件的中断(通常来说是软件)信号。
有一些优先的可能信号,我们不能自己发明我们自己的。(例如,可能有64个信号)。LINUX信号名字都是用“SIG”开头的。尽管这些信号都有编号,但是我们通常还是会通过它们的名字来称呼它。例如:
SIGINT 是在用户按压Control-C的时候生成的信号。将从终端中断程序。
SIGALRM是在报警功能设置的计时器关闭时创建的信号。
SIGABRT是当程序执行终止函数时生成的信号。
SIGSTOP通知LINUX暂停程序,稍后恢复。
SIGCONT告诉LINUX恢复之前暂停的程序。
SIGSEGV会在出现分段错误时发送给程序信号。
SIGKILL一旦发送给进程就将导致它中断。
当信号出现时,进程必须去处理它。有3种情况:
忽略它。很多信号可以被忽略,但是不是所有。硬件异常例如“除以0”(用整数)不可以成功被忽视并且一些信号一点也不能被忽视,比如SIGKILL。
获取并处理异常。当异常发生时程序会去执行一个功能。这个功能可能优雅的中断程序也可能在不中断程序的情况下处理它。
执行默认行为。每一个信号都有一个默认行为,这个默认行为可能是:
忽略
中断
中断并核心转储
停止/暂停程序
恢复之前暂停的程序
每一个信号都有一个当前“处置”,指示什么行为是默认的。定一个可选项就是有一个编程自定义函数去作为信号处理器服务。