SSH 会话不会被 cpp restart 命令终止

SSH 会话不会被 cpp restart 命令终止

我有一个小的 cpp 应用程序,它将重新启动系统。到目前为止,这效果非常好。

sync(); //need for data safety
reboot(RB_AUTOBOOT);

除非您通过 SSH 连接并在连接的设备上运行此程序。然后 SSH 连接挂起。

如果您通过 SSH 连接并使用 CLI 命令

sudo reboot

或者

sudo shutdown -r now

SSH 连接将终止并显示以下消息

Connection to xxx.xxx.xxx.xxx closed by remote host.
Connection to xxx.xxx.xxx.xxx closed.

如何使用 cpp 重启方法获得相同的行为?

我读https://man7.org/linux/man-pages/man2/reboot.2.html并在互联网上搜索,但没有找到有关此主题的内容。

答案1

解决方案是使用kill(1, SIGINT)而不是reboot(RB_AUTOBOOT)

更多详情请参阅https://stackoverflow.com/a/69042761/6729765

答案2

您必须了解“内核重新启动”和“操作系统重新启动”之间的区别:

内核重新​​启动很可能只是刷新磁盘缓冲区然后重置,而操作系统重新启动将(尝试)终止所有进程。

sshd 当被杀死时,会主动结束所有现有的连接,因此客户端会得到通知。如果对方(服务器)刚刚重置,客户端不会注意到(好吧,PuTTY 似乎在按下任意键(无法传递)后不久就会注意到)。

相关内容