在信号处理程序中恢复终端设置 (termios)
Restoring terminal settings (termios) in signal handler
在更改终端设置的代码中(它嵌入了 python,它又使用了一些终端操作模块),在我通过 Ctrl-\ 向进程发送 SIGQUIT 退出后,更改的状态仍然存在。
在启动时保存终端设置,然后注册将恢复这些设置的 SIGQUIT 处理程序是否安全?如果不安全,最坏的情况下会发生什么?
信号处理程序通常应该精简并且不做太多工作。您不应该从信号处理程序调用非异步安全函数。 Async-signal-safe functions。因此,如果您的 termios 代码包含非 AS 函数,则不建议从信号处理程序恢复终端设置(尽管您将处理 SIGQUIT)
这个怎么样:
fork()
在 signal
的手册页中被列为 AS 安全。为什么不分叉一个子进程,execv
另一个将恢复设置的程序?
在更改终端设置的代码中(它嵌入了 python,它又使用了一些终端操作模块),在我通过 Ctrl-\ 向进程发送 SIGQUIT 退出后,更改的状态仍然存在。
在启动时保存终端设置,然后注册将恢复这些设置的 SIGQUIT 处理程序是否安全?如果不安全,最坏的情况下会发生什么?
信号处理程序通常应该精简并且不做太多工作。您不应该从信号处理程序调用非异步安全函数。 Async-signal-safe functions。因此,如果您的 termios 代码包含非 AS 函数,则不建议从信号处理程序恢复终端设置(尽管您将处理 SIGQUIT)
这个怎么样:
fork()
在 signal
的手册页中被列为 AS 安全。为什么不分叉一个子进程,execv
另一个将恢复设置的程序?