【问题标题】:Restoring terminal settings (termios) in signal handler在信号处理程序中恢复终端设置 (termios)
【发布时间】:2016-10-21 05:53:33
【问题描述】:

在更改终端设置的代码中(它嵌入了 python,而后者又使用了一些终端操作模块),在我通过 Ctrl-\ 向进程发送 SIGQUIT 退出后,更改的状态仍然存在。

在启动时保存终端设置是否安全,然后注册将恢复这些设置的 SIGQUIT 处理程序?如果不安全,最坏的情况会发生什么?

【问题讨论】:

    标签: linux terminal signal-handling termios


    【解决方案1】:

    信号处理程序通常应该是精简的,并且不做太多工作。您不应该从信号处理程序调用非异步安全函数。 Async-signal-safe functions。因此,如果您的 termios 代码包含非 AS 函数,则不建议从信号处理程序恢复终端设置(尽管您将处理 SIGQUIT)

    这个怎么样:

    fork()signal 的手册页中被列为 AS 安全。为什么不 fork 一个子进程,execv 另一个可以恢复设置的程序?

    【讨论】:

    • 有用的答案,但我不明白第一部分:“超出你的程序范围”??你怎么知道的?它完全在范围之内,因为它的其他部分首先会更改终端设置。
    • 没有。我的意思是,即使在程序终止后,更改也会持续存在。我只是在重复你提到的内容。已删除这些语句
    猜你喜欢
    • 2021-11-06
    • 1970-01-01
    • 2015-07-13
    • 1970-01-01
    • 2013-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多