使用信号处理器

现在程序已经可以在用户按下Ctrl-C以后做一些事情了。

使用信号处理器 - 图1

程序要求用户输入名字,然后它会等待输入。如果用户没有输入名字而是按了Ctrl-C,操作系统会自动向进程发送中断信号(SIGINT),然后用我们在catch_signal()函数中注册的sigaction来处理这个信号。sigaction中有一个指向diediedie()函数的指针,程序会调用这个函数,显示消息并调用exit()

使用信号处理器 - 图2试驾

运行新版程序,然后按Ctrl-C,结果如下:

使用信号处理器 - 图3

操作系统收到了Ctrl-C以后向进程发送SIGINT信号,然后进程运行了你的diediedie()函数。

使用信号处理器 - 图4

操作系统可以向进程发送各种信号,请把下列信号与引起它们的原因连接起来。

使用信号处理器 - 图5

 

使用信号处理器 - 图6

操作系统可以向进程发送各种信号,你把下列信号与引起它们的原因连接了起来。

使用信号处理器 - 图7

 

这里没有蠢问题

问:如果中断信号的处理器不调用exit(),程序还能结束吗?

:不会。

问:也就是说,我可以写一个忽略中断信号的程序?

:可以是可以,但这可不是什么好主意。程序收到错误信号以后最好还是退出,即使之前你运行了自己的代码。