C++ 为什么原始进程在Qt应用程序中以僵尸形式启动。Linux
我正在使用qt creator在linux上编写一个小应用程序。 当我启动应用程序时,我希望它执行一个shell命令。我使用QProcess来处理它,如下所示:C++ 为什么原始进程在Qt应用程序中以僵尸形式启动。Linux,c++,linux,qt,process,zombie-process,C++,Linux,Qt,Process,Zombie Process,我正在使用qt creator在linux上编写一个小应用程序。 当我启动应用程序时,我希望它执行一个shell命令。我使用QProcess来处理它,如下所示: int main(int argc, char *argv[]) { MyApplication a(argc, argv); QProcess mapProc(&a); QString command; QStringList args;
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();
}
intmain(intargc,char*argv[])
{
MyApplication a(argc、argv);
QProcess mapProc(&a);
QString命令;
QStringList-args;
command=“java”;
args$USER
在QProcess
中不会真正像那样工作。您需要通过/bin/sh-c“mycmd”
调用该命令,如果您只是按照下面所示的正确的Qt方式来调用,甚至更好
尝试使用,因此写下以下内容:
QString homeLocation =
QStandardPaths::standardLocations(QStandardPaths::HomeLocation);
args << "-jar" << QString(homeLocation.first() + "/MapServer/map.jar")
<< "localhost" << "9797" << "12123";
QString homeLocation=
QStandardPath::StandardLocation(QStandardPath::HomeLocation);
args你能用任何简单的外部程序重现这个问题吗,或者仅仅用这个map.jar?还有,你搞乱了SIGCHILD吗?我解决了它。命令$USER不能作为参数。它需要完整的路径作为常量字符串:“/home/cupuyc/MapServer/map.jar”。
args << "-jar" << "/home/$USER/MapServer/map.jar"
<< "localhost" << "9797" << "12123";