c++ - 为什么起源进程在 Qt-app 中以僵尸启动。 Linux

标签 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;

        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";

关于c++ - 为什么起源进程在 Qt-app 中以僵尸启动。 Linux,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26711089/

相关文章:

c++ - 无法在 Qt C++ 程序中加载 qrc 文件

c++ - 在 C++ 中确定 getline() 起点

c++ - Qt QScriptEngine 和从 Qt 脚本到 C++ 的默认转换

python - 在安装了python3.5.2的Ubuntu16.04中,gedit有问题

php - PHP 未完全检索 Shell 输出!

c++ - 在 Qt 应用程序中注册帮助手册

C++ 无法返回 vector 模板

c++ - 如何在 C 或 C++ 中反转字符串?

java - Linux PC 和 Android 之间的 Wifi 文件传输

qt - 排序 QObject child