【问题标题】:SSH session does not get terminated with cpp reboot command but with CLI command rebootSSH 会话不会通过 cpp reboot 命令终止,而是通过 CLI 命令重新启动
【发布时间】:2021-09-03 09:14:47
【问题描述】:

我有一个小型 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 并搜索了互联网,但没有找到有关此主题的信息。

【问题讨论】:

    标签: c++ linux ssh debian-based


    【解决方案1】:

    sudo reboot 命令将通知init 您想要重新启动,init 将杀死所有用户空间进程,然后执行实际的内核重新启动。

    reboot 系统调用相当于sudo reboot -f(立即重新启动)。

    您可以尝试自己杀死所有内容,然后调用系统调用。

    或者您可以询问 init,按照惯例,它位于 PID=1。通过向其发送 SIGINT 来指示重新启动。

    所以:

    #include <sys/types.h>
    #include <signal.h>
    
    int main() {
        kill(1, SIGINT);
    }
    

    应该这样做。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-20
      • 1970-01-01
      • 1970-01-01
      • 2021-10-09
      • 2014-11-24
      • 2020-07-02
      • 2011-01-12
      • 1970-01-01
      相关资源
      最近更新 更多