为什么起源的过程开始作为僵尸在Qt-app。 Linux的

我正在使用qt创build器在linux上编写一个小应用程序。 当我开始我的应用程序,我希望它执行一个shell命令。 我是这样使用QProcess的:

int main(int argc, char *argv[]) { MyApplication a(argc, argv); QProcess mapProc(&a); QString command; QStringList args; command = "java"; args << "-jar" << "/home/$USER/MapServer/map.jar" << "localhost" << "9797" << "12123"; mapProc.start(command, args); bool flag = mapProc.waitForStarted(); QProcess::ProcessState state = mapProc.state(); qDebug() << mapProc.errorString(); qDebug() << mapProc.pid(); /*///////////////// some code /////////////////*/ return a.exec(); } 

但是当我的应用程序启动时,进程“mapProc”变成僵尸。 为什么? 我究竟做错了什么?

$USER不会像QProcess那样工作。 你需要通过/bin/sh -c "mycmd"来调用这个命令,或者如果你按照下面所说的恰当的Qt方式来调用这个命令。

尝试使用QStandardPaths ,所以写下这个:

 QString homeLocation = QStandardPaths::standardLocations(QStandardPaths::HomeLocation); args << "-jar" << QString(homeLocation.first() + "/Mapserver/map.jar") << "localhost" << "9797" << "12123"; 

而不是这个:

 args << "-jar" << "/home/$USER/Mapserver/map.jar" << "localhost" << "9797" << "12123";