Linux
SSH 會話不會被 cpp reboot 命令終止
我有一個小型 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 reboot 方法獲得相同的行為?
我閱讀了https://man7.org/linux/man-pages/man2/reboot.2.html並蒐索了網際網路,但沒有找到有關此主題的內容。
解決方案是使用
kill(1, SIGINT)
而不是reboot(RB_AUTOBOOT)
您必須了解“核心重啟”和“作業系統重啟”之間的區別:
核心重啟很可能只是刷新磁碟緩衝區然後重置,而作業系統重啟將(嘗試)終止所有程序。
sshd 在被殺死時,會主動結束所有現有的連接,所以會通知客戶端。如果對方(伺服器)剛剛被重置,客戶端不會注意到(好吧,PuTTY 似乎在按下任何鍵後不久就會注意到(無法傳遞))。