我有一个小的 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)
答案2
您必须了解“内核重新启动”和“操作系统重新启动”之间的区别:
内核重新启动很可能只是刷新磁盘缓冲区然后重置,而操作系统重新启动将(尝试)终止所有进程。
sshd 当被杀死时,会主动结束所有现有的连接,因此客户端会得到通知。如果对方(服务器)刚刚重置,客户端不会注意到(好吧,PuTTY 似乎在按下任意键(无法传递)后不久就会注意到)。