文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
捕捉信号然后运行自己的代码
有时你希望在别人打断你的程序时运行自己的代码。假设进程打开了一些文件连接或网络连接,你希望在退出之前把它们关闭,并且做一些清理工作。当计算机在向你发送信号时,如何让它运行你的代码呢?可以用
sigaction 。
sigaction 是一个函数包装器
sigaction 是一个结构体,它有一个函数指针。sigaction 告诉操作系统进程收到某个信号时应该调用哪个函数。如果想在某人向进程发送中断信号时让操作系统调用 diediedie() 函数,就需要把 diediedie() 函数包装成 sigaction 。
sigaction 的创建方法如下:
sigaction 包装的函数就叫处理器,因为它将用来处理发送给它的信号,而处理器必须以特定的方式创建。
处理器必须接收信号参数
信号是一个整型值,如果你创建了一个自定义处理器函数,就需要接收一个整型参数,像这样:
因为我们以参数的形式传递信号,所以多个信号可以共用一个处理器;也可以为每个信号写一个处理器,完全由你做主。
处理器的代码应该短而快,刚好能处理接收到的信号就好。在处理器函数中使用标准输出和标准错误时要小心。虽然示例代码在标准输出中显示了文本,但在更复杂的程序中这么做时千万要小心。之所以会有信号就是因为程序中发生了故障,而故障可能就是标准输出无法使用,因此要小心。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论