Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/144.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么原始进程在Qt应用程序中以僵尸形式启动。Linux_C++_Linux_Qt_Process_Zombie Process - Fatal编程技术网

C++ 为什么原始进程在Qt应用程序中以僵尸形式启动。Linux

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;

我正在使用qt creator在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();
    }
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";