Linux

SSH 會話不會被 cpp reboot 命令終止

  • September 6, 2021

我有一個小型 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)

https://stackoverflow.com/a/69042761/6729765中的更多詳細資訊

您必須了解“核心重啟”和“作業系統重啟”之間的區別:

核心重啟很可能只是刷新磁碟緩衝區然後重置,而作業系統重啟將(嘗試)終止所有程序。

sshd 在被殺死時,會主動結束所有現有的連接,所以會通知客戶端。如果對方(伺服器)剛剛被重置,客戶端不會注意到(好吧,PuTTY 似乎在按下任何鍵後不久就會注意到(無法傳遞))。

引用自:https://unix.stackexchange.com/questions/667186