【发布时间】:2021-07-26 17:36:19
【问题描述】:
我正在使用 QtCreator,我正在尝试创建一个运行 bash 脚本的 QProcess。在该脚本内部,执行一些其他命令后,将运行一个可执行文件。
当我监控 QProcess 时,我认为当脚本完成时,即使从该脚本启动的可执行文件仍在运行,QProcess 也会显示为已停止。
有没有办法解决这个问题?以某种方式附加到从该脚本启动的可执行文件?
我正在执行的命令是:
xterm -T "Window Title" -geometry 120x24+0+20 -e \
bash -c 'sudo -E ./executable -s 2>&1 | tee -i log_file.log' &
...并且我希望我的父进程检测 ./executable 何时完成 - 而不在发生这种情况时强制 xterm 立即退出。
【问题讨论】:
-
不显示细节很难说。最简单的修复(并且可以说是最好的)是将您的脚本修改为
exec,无论它启动什么进程,以便该进程接管脚本预先存在的PID。这也是许多初始化系统跟踪服务可执行文件的首选方式。 -
谢谢,查尔斯!你能澄清一下我该怎么做吗?在 bash 脚本中,以下命令执行可执行文件。如何将其编辑为“执行”? xterm -T "窗口标题" -geometry 120x24+0+20 -e bash -c 'sudo -E ./executable -s 2>&1 | tee -i log_file.log' &
-
经过一番研究,似乎这就是 xterm 命令末尾的 & 的用途?所以我不确定那是什么问题。
-
&与exec完全相反。exec会告诉 shell 在同一个进程中运行某些东西。&告诉 shell 产生一个子进程。 -
如果你想保持进程树尽可能浅,一个替代方案可能看起来像:
exec xterm -T "Window Title" -geometry 120x24+0+20 -e bash -c 'exec > >(exec tee -i log_file.log) 2>&1; exec sudo -E ./executable -s'