UNIX信号初接触

unix下信号的概念可以和Java中的异常来进行对比理解。
SIGINT信号由CTRL+C产生,CTRL+C只对前台进程有效。当一个命令在执行时加&放在后台运行时,无效。
信号相对于进程的控制流程来说是异步的。
信号的产生:
用户在终端按下某些键时,终端驱动程序会发送信号给前台进程,例如:
CTRL+C产生SIGINT信号
CTRL+\产生SIGFPE信号
CTRL+Z产生SIGTSTP信号
硬件产生信号,例如:
当前进程执行了除以0的指令,CPU运算单元产生异常,内核将这个异常解释为SIGFPE信号发送给进程
当前进程访问了非法内存地址,MMU会产生异常,内核将这个异常解释为SIGSEGV信号发送给进程
一个进程可以调用kill(2)函数发送信号给另一个进程
可以用kill(1)命令发送信号给某个进程,kill(1)命令也是调用kill(2)实现的,如果不明确指定信号则发送SIGTERM信号,该信号的
默认处理动作是终止进程。
当内核检测到某种软件条件发生时也可以通过信号通知进程,例如闹钟超时产生SIGALRM信号,向终端已关闭的管道写数据时产生
SIGPIPE信号。

用户程序可以调用sigaction(2)函数告诉内核如何处理某种信号,可选的处理动作有以下三种:

1.忽略此信号;

2.执行该信号的默认处理动作

3.提供一个信号处理函数,要求内核在处理该信号时切换到用户态执行这个处理函数,这种方式称为捕捉(CATCH)一个信号。

你可能感兴趣的:(unix)