【发布时间】:2023-10-31 19:45:02
【问题描述】:
我正在尝试找到一种方法来在 Linux 系统中终止 GUI 程序后保持QProcess 执行的命令。现在,当进程结束时,所有执行的命令都消失了。 QProcess 终止后有没有办法保留它?
// code which executes command in linux
QProcess *mproc = new Qprocess(this);
QStringList args;
mproc->setWorkingDirectory("/home/test");
args << "-c" << "source tool_def1.env; source tool_def2.env; myProg";
mproc->start("/bin/csh", args);
tool_def1.env 和tool_def2.env 文件包含一些用于执行myProg 的环境变量,例如set path = (~~~~)。
在 GUI 程序中,这段代码做得很好。而且,我想在 GUI 程序终止后运行 GUI 程序的终端中执行myProg 程序。
但是,如果GUI程序被终止,我无法运行myProg,因为tool_def1.env和tool_def2.env文件的环境变量消失了。
是否可以保留环境变量?或者,是否可以在其他进程中执行myProg程序,环境变量为mproc进程如下?
QProcess *mproc2 = new QProcess(this);
mproc2->setWorkingDirectory("/home/test2");
mproc2->start("myProg");
【问题讨论】:
-
谢谢你,scopchanov。我尝试使用 startDetached,但效果不佳。在我的 GUI 程序中,它运行良好。但是,当 GUI 程序运行或终止时,在终端中还找不到“myProg”。此外,“mproc2”进程不起作用。我只在我的代码中将 'start' 交换为 'startDetached'。对吗??
-
要检查的几个问题:您确定 startDetached 的返回是真的吗?您是否检查了返回的 PID?你确定它一直在运行吗? (也许写一些你可以检查的日志文件)
-
我检查了 startDetached 的返回是否为真,并且“myProg”运行良好。但是,在我关闭 GUI 程序和“myProg”后,当我在终端的 shell 提示符下再次执行 myProg 时,myProg 不起作用并显示“找不到命令”消息。
标签: c++ qt environment-variables qprocess