我为我的设备创建了一个更新例程。可以使用串行控制台、SSH、telnet、网络服务器或 REST API 启动更新过程。更新开始后,我想阻止来自所有来源的所有用户输入,直到更新完成并且设备重新启动。终止 SSH、telnet、Web 服务器和 REST 服务器很容易,但我也想阻止串行控制台上的输入。
因此,我有以下情况:
- 用户使用
/dev/ttyS0
/上的串行接口进行连接/dev/console
。 - 如果该 shell 会话关闭,inittab 会重新生成它
- 升级开始后,我不希望用户在控制台上输入任何内容,因此我想阻止该 shell 会话的输入。
我发现如果我cat /dev/ttyS0
或cat /dev/console
我可以从 shell 中“窃取”输入,从而阻止输入。如果我这样做,(cat /dev/ttyS0 > /dev/null) &
我可以在后台执行此操作,而无需查看输入。
这个方法可以吗?我有什么理由不应该这样做吗?还有更好的办法吗?
答案1
我建议暂时更改init
配置,以便 shell 暂时不处于活动状态。
既然你提到了inittab
,我就假设你正在使用sysvinit
.这样,您可以通过更改inittab
配置文件然后运行init q
(这会导致init
重新读取其配置文件并更新内部状态)来实现这一点。根据sysvinit
串行控制台上运行的 shell 的版本,您可能还需要显式终止 shell 本身。