我的程序正在接收来自TCP套接字的订单,其中一个是"启动startx",但它不应该切断主进程的继续,我尝试了startDetached,但在未来我的应用程序应该能够杀死程序,调用process->kill()
似乎不能在一个分离的进程上工作,非分离的问题是我的程序等待QProcess在使用startx启动其他命令之前终止。对于终端,下面是我想要实现的命令:
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);
那么你认为startdetached是正确的方法吗?在这种情况下,我如何终止该进程?或者我应该用别的东西作为简单的开头吗?
您可以使用startDetached作为startx和存储进程pid。如果函数成功,则*pid设置为已启动进程的进程标识符。
你应该添加-9作为你的杀手级进程的参数:
QString cmd="kill";
QStringList args = QStringList() << "-9" << QString::number(pid);
killer.startDetached(cmd, args);
当你使用"cmd -9" QProcess试图启动"cmd -9"作为一个命令,而不是一个命令与-9参数