LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 307|回复: 0

信号处理

[复制链接]
发表于 2024-1-23 17:44:15 | 显示全部楼层 |阅读模式


int PyErr_CheckSignals()
属于 稳定 ABI.
这个函数与Python的信号处理交互。

如果在主 Python 解释器下从主线程调用该函数,它将检查是否向进程发送了信号,如果是,则发起调用相应的信号处理句柄。 如果支持 signal 模块,则可以发起调用以 Python 编写的信号处理句柄。

该函数会尝试处理所有待处理信号,然后返回 0。 但是,如果 Python 信号处理句柄引发了异常,则设置错误指示符并且函数将立即返回 -1 (这样其他待处理信号可能还没有被处理:它们将在下次发起调用 PyErr_CheckSignals() 时被处理)。

如果函数从非主线程调用,或在非主Python解释器下调用,则它不执行任何操作并返回0。

这个函数可以由希望被用户请求(例如按Ctrl-C)中断的长时间运行的C代码调用。

备注 针对 SIGINT 的默认 Python 信号处理句柄会引发 KeyboardInterrupt 异常。
void PyErr_SetInterrupt()
属于 稳定 ABI.
模拟一个 SIGINT 信号到达的效果。 这等价于 PyErr_SetInterruptEx(SIGINT)。

备注 此函数是异步信号安全的。 它可以不带 GIL 并由 C 信号处理句柄来调用。
int PyErr_SetInterruptEx(int signum)
属于 稳定 ABI 自 3.10 版开始.
模拟一个信号到达的效果。 当下次 PyErr_CheckSignals() 被调用时,将会调用针对指定的信号编号的 Python 信号处理句柄。

此函数可由自行设置信号处理,并希望 Python 信号处理句柄会在请求中断时(例如当用户按下 Ctrl-C 来中断操作时)按照预期被发起调用的 C 代码来调用。

如果给定的信号不是由 Python 来处理的 (即被设为 signal.SIG_DFL 或 signal.SIG_IGN),它将会被忽略。

如果 signum 在被允许的信号编号范围之外,将返回 -1。 在其他情况下,则返回 0。 错误指示符绝不会被此函数所修改。

备注 此函数是异步信号安全的。 它可以不带 GIL 并由 C 信号处理句柄来调用。
在 3.10 版本加入.

int PySignal_SetWakeupFd(int fd)
这个工具函数指定了一个每当收到信号时将被作为以单个字节的形式写入信号编号的目标的文件描述符。 fd 必须是非阻塞的。 它将返回前一个这样的文件描述符。

设置值 -1 将禁用该特性;这是初始状态。 这等价于 Python 中的 signal.set_wakeup_fd(),但是没有任何错误检查。 fd 应当是一个有效的文件描述符。 此函数应当只从主线程来调用。

在 3.5 版本发生变更: 在 Windows 上,此函数现在也支持套接字处理。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表