返回介绍

捕捉信号然后运行自己的代码

发布于 2024-10-10 23:21:38 字数 906 浏览 0 评论 0 收藏 0

有时你希望在别人打断你的程序时运行自己的代码。假设进程打开了一些文件连接或网络连接,你希望在退出之前把它们关闭,并且做一些清理工作。当计算机在向你发送信号时,如何让它运行你的代码呢?可以用

sigaction 。

sigaction 是一个函数包装器

sigaction 是一个结构体,它有一个函数指针。sigaction 告诉操作系统进程收到某个信号时应该调用哪个函数。如果想在某人向进程发送中断信号时让操作系统调用 diediedie() 函数,就需要把 diediedie() 函数包装成 sigaction 。

sigaction 的创建方法如下:

sigaction 包装的函数就叫处理器,因为它将用来处理发送给它的信号,而处理器必须以特定的方式创建。

处理器必须接收信号参数

信号是一个整型值,如果你创建了一个自定义处理器函数,就需要接收一个整型参数,像这样:

因为我们以参数的形式传递信号,所以多个信号可以共用一个处理器;也可以为每个信号写一个处理器,完全由你做主。

处理器的代码应该短而快,刚好能处理接收到的信号就好。在处理器函数中使用标准输出和标准错误时要小心。虽然示例代码在标准输出中显示了文本,但在更复杂的程序中这么做时千万要小心。之所以会有信号就是因为程序中发生了故障,而故障可能就是标准输出无法使用,因此要小心。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文