시스템을 재부팅하는 작은 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는 아무 키나 누른 직후에 인지하는 것 같습니다(전달할 수 없음).)