SSH 会话不会被 cpp reboot 命令终止,而是被 CLI 命令 reboot 终止
SSH session does not get terminated with cpp reboot command but with CLI command 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 重新启动方法获得相同的行为?
我阅读了 https://man7.org/linux/man-pages/man2/reboot.2.html 并在互联网上进行了搜索,但未找到有关此主题的内容。
sudo reboot
命令将通知 init
您想要重新启动,init 将杀死所有用户-space 进程,然后进行实际的内核重新启动。
reboot
系统调用相当于 sudo reboot -f
(立即重启)。
您可以尝试自己杀死一切,然后调用系统调用。
或者您可以询问 init,按照惯例它位于 PID=1。通过向其发送 SIGINT 来表示重新启动。
所以:
#include <sys/types.h>
#include <signal.h>
int main() {
kill(1, SIGINT);
}
应该做。
我有一个小型 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 并在互联网上进行了搜索,但未找到有关此主题的内容。
sudo reboot
命令将通知 init
您想要重新启动,init 将杀死所有用户-space 进程,然后进行实际的内核重新启动。
reboot
系统调用相当于 sudo reboot -f
(立即重启)。
您可以尝试自己杀死一切,然后调用系统调用。
或者您可以询问 init,按照惯例它位于 PID=1。通过向其发送 SIGINT 来表示重新启动。
所以:
#include <sys/types.h>
#include <signal.h>
int main() {
kill(1, SIGINT);
}
应该做。