Terminal 使用tcgetattr()和tcsetattr()时需要处理哪些信号?

Terminal 使用tcgetattr()和tcsetattr()时需要处理哪些信号?,terminal,posix,signals,Terminal,Posix,Signals,POSIX 2008: 使用这些函数的程序应该编写为捕获所有函数 发出信号并采取其他适当措施,以确保 无论计划与否,程序都会终止终端设备的 状态将恢复为其原始状态 关于使用tcgetattr()和tcsetattr()更改终端设备的状态。一般来说,需要处理哪些信号,必须采取哪些“其他适当行动”?如果一般无法回答这个问题,那么在使用tcgetattr()和tcsetattr()关闭终端回显时,哪些信号/操作是合适的?评论的要点是tcsetattr将更改封闭终端的属性。因此,如果您编写了一个禁用终端

POSIX 2008:

使用这些函数的程序应该编写为捕获所有函数 发出信号并采取其他适当措施,以确保 无论计划与否,程序都会终止终端设备的 状态将恢复为其原始状态


关于使用tcgetattr()和tcsetattr()更改终端设备的状态。一般来说,需要处理哪些信号,必须采取哪些“其他适当行动”?如果一般无法回答这个问题,那么在使用tcgetattr()和tcsetattr()关闭终端回显时,哪些信号/操作是合适的?

评论的要点是
tcsetattr
将更改封闭终端的属性。因此,如果您编写了一个禁用终端echo的程序,并且该程序退出时没有重置该值,那么它将在会话期间被禁用(除非另一个程序明确地重新启用它)


适当的做法是,如果要更改属性,请在更改之前保存所有旧值(然后在退出之前回滚更改)。这可以在信号处理程序中完成,这正是本建议的重点

我明白,但我应该在处理器中处理哪些信号?只是SIGINT,或者更多?一些标准信号是SIGINT、SIGHUP(挂起)、SIGQUIT、SIGTERM、SIGSEGV。但是你不能捕获一个SIGKILL(kill-9)