Qt Qprocess如何在不分离的情况下启动startx并收回控制权
我的程序正在接收来自TCP套接字的命令,其中一个命令是“launch startx”,但它不应该阻止主进程继续,我尝试了startDetached,但将来我的应用程序应该能够终止程序,调用Qt Qprocess如何在不分离的情况下启动startx并收回控制权,qt,process,qt4,qt5,qprocess,Qt,Process,Qt4,Qt5,Qprocess,我的程序正在接收来自TCP套接字的命令,其中一个命令是“launch startx”,但它不应该阻止主进程继续,我尝试了startDetached,但将来我的应用程序应该能够终止程序,调用process->kill()似乎无法在分离的进程上运行,非分离的问题是,我的程序在使用startx启动其他命令之前等待QProcess终止。 有了终端,我想实现以下命令: startx& somecommands_that_need_startx fg Ctr_c 编辑:以下是我使用分离进程的pid
process->kill()
似乎无法在分离的进程上运行,非分离的问题是,我的程序在使用startx启动其他命令之前等待QProcess终止。
有了终端,我想实现以下命令:
startx&
somecommands_that_need_startx
fg
Ctr_c
编辑:以下是我使用分离进程的pid尝试的内容:
QString cmd;
QStringList args;
cmd = "startx";
args << "";
qint64 pid_cur;
p->startDetached(cmd,args,"/",&pid_cur);
//p->execute(cmd,args);
std::cout << "pid_cur : " << QString::number(pid_cur).toStdString();
//then in a console i have tried kill -9 pid_cur it told me pid_cur didnt exist
p->waitForFinished(-1);
//some command
QProcess killer;
std::cout << QString::number(pid).toStdString() << std::endl;
QString cmd;
QStringList args;
cmd = "kill -9 ";
args << QString::number(pid);
killer.startDetached(cmd,args);
QString cmd;
QStringList-args;
cmd=“startx”;
args已开始详细说明(cmd、args、“/”、&pid_cur);
//p->execute(cmd,args);
std::cout您可以使用startDetached进行startx和存储过程pid。
您应该添加-9作为killer流程的参数:
QString cmd="kill";
QStringList args = QStringList() << "-9" << QString::number(pid);
killer.startDetached(cmd, args);
QString cmd=“kill”;
QStringList args=QStringList()我已经尝试过了,但是存储的id不是真实的id(我试图杀死-9),也不是0。我正在发布代码。您是否检查了退出代码,您的startx实际上已经启动?常见的错误可能是您需要提供二进制文件的完整路径。For kill命令应该类似于:cmd=“/bin/kill”;args好的,startx命令实际上是有效的,因为我在主屏幕上进行了验证,kill命令似乎不起作用。看起来startDetached没有正确填充pid(或者QString没有正确解释这个数字)。您在cout输出中看到了什么pid?startx的实际pid是什么?你也能qDebug()吗