システムを再起動する小さな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
「カーネルの再起動」と「オペレーティングシステムの再起動」の違いを理解する必要があります。
カーネルの再起動はディスクバッファをフラッシュしてリセットしますが、OSの再起動はすべてのプロセスを終了(試行)します。
sshd が終了すると、既存のすべての接続が積極的に終了するため、クライアントに通知が送信されます。相手(サーバー)がリセットされたばかりの場合、クライアントはこれを認識できません(まあ、PuTTYは任意のキーを押した直後に認識するようです(配信できません))。