Я пишу небольшое приложение на Linux с использованием QT Creator.
Когда я запускаю свое приложение, я хочу, чтобы оно выполняло команду оболочки. Я использую 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"
или даже лучше, если вы просто сделаете это надлежащим образом, как указано ниже.
Попробуйте использовать 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";