使用信号处理器
现在程序已经可以在用户按下Ctrl-C以后做一些事情了。
程序要求用户输入名字,然后它会等待输入。如果用户没有输入名字而是按了Ctrl-C,操作系统会自动向进程发送中断信号(SIGINT
),然后用我们在catch_signal()
函数中注册的sigaction
来处理这个信号。sigaction
中有一个指向diediedie()
函数的指针,程序会调用这个函数,显示消息并调用exit()
。
试驾
运行新版程序,然后按Ctrl-C,结果如下:
操作系统收到了Ctrl-C以后向进程发送SIGINT
信号,然后进程运行了你的diediedie()
函数。
操作系统可以向进程发送各种信号,请把下列信号与引起它们的原因连接起来。
操作系统可以向进程发送各种信号,你把下列信号与引起它们的原因连接了起来。
这里没有蠢问题
问:如果中断信号的处理器不调用
exit()
,程序还能结束吗?答:不会。
问:也就是说,我可以写一个忽略中断信号的程序?
答:可以是可以,但这可不是什么好主意。程序收到错误信号以后最好还是退出,即使之前你运行了自己的代码。