У меня следующая проблема: У меня есть Qt GUI-приложение (c ++), которое запускает внешнее Java-приложение через bash-скрипт.Когда я завершаю свой QProcess, сценарий уничтожается, но дочерний процесс (java-приложение) все еще выполняется.
Я не понимаю этого поведения, потому что, если я запускаю сценарий в терминале и уничтожаю его, дочерний процесс также убит.Возможно, это как-то связано с различными циклами событий в Qt, которые я еще не понял.
Вот мой код:
MainWindow.h
#include <QMainWindow>
#include <QProcess>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = nullptr);
~MainWindow();
private slots:
void slot_startQProcess();
void slot_killQProcess();
private:
Ui::MainWindow *ui;
QProcess myProcess;
};
MainWindow.cpp
#include "MainWindow.h"
#include "ui_MainWindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
connect(ui->pb_start, &QPushButton::clicked, this, &MainWindow::slot_startQProcess);
connect(ui->pb_kill, &QPushButton::clicked, this, &MainWindow::slot_killQProcess);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::slot_startQProcess()
{
myProcess.setWorkingDirectory("./i2exrep");
myProcess.start("./myScript.sh");
}
void MainWindow::slot_killQProcess()
{
myProcess.close();
}
main.cpp
#include "MainWindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
myScript.sh
#!/bin/csh
java -jar i2exrep.jar
Структура папки:
- .pro файл
- *. cpp
- *. h
- i2exrep (папка)
Таким образом, мое приложение запускает «myScript.sh», который запускает «java -jar i2exrep.jar»
Уничтожение QProcess завершает только «myScript.sh», но «java -jar»i2exrep.jar "все еще работает.- i2exrep.jar
РЕДАКТИРОВАТЬ:
Я пытался сделать то же самое с другой основной функцией:
#include <QCoreApplication>
#include <QProcess>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QProcess myProcess;
myProcess.setWorkingDirectory("./i2exrep");
myProcess.start("./myScript.sh");
return a.exec();
}
Когда я выйду из этой программы, приложение Java будеттакже прекращено.Когда я заканчиваю первую программу (приложение с графическим интерфейсом), то только сценарий завершается и приложение Java продолжает работать.Я получаю следующее сообщение об ошибке:
QProcess: Destroyed while process ("./myScript.sh") is still running.