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);
}

应该做。