QProcess启动的嵌套远程进程仍然是僵尸

The*_*dis 6 c++ linux ssh qt4

我正在我的日志服务器上拖尾日志以在窗口中显示它们中的任何一个,但是当我关闭我的应用程序时,远程尾部进程在服务器上保持活动状态.

重复会产生大量的僵尸进程.

process_log_watcher_->start(QString(
      "ssh -t %1 \"tail -F -n 0 /var/log/logfile.log\"").arg(log_server_));
Run Code Online (Sandbox Code Playgroud)

在控制台中,该ssh -t选项处理终端的退出; 我想重现那种行为.

在我打电话的析构函数中process_log_watcher_->close();,但它似乎没有帮助.它与使用已ssh -t server "tail -F -n 0 /var/log/logfile.log"启动的关闭控制台窗口的行为不同.

可能是QProcess没有终止ssh会话吗?

The*_*dis 3

ssh -t server bash -c \"tail -F -n 0 /var/log/logfile.log\"解决了问题。

这意味着 ssh 连接终止未正确转发到 tail,但它正确转发到远程 bash,然后远程 bash 根据需要终止 tail。