我写了这个例子来说明linux和windows之间在进程处理方面的区别。
我的主应用程序通过调用QProcess :: start()启动一个子应用程序。如果此子进程通过调用execv(Windows下的_execv)重新启动自身,则仅在Windows下的顶级应用程序上触发finished()信号。就我而言,这是出乎意料的。
有没有办法避免这个信号,或者这是一个QProcess错误?
马修
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
connect( ui->pushButtonStart, SIGNAL( clicked() ), this, SLOT( start() ) ) ;
connect( ui->pushButtonRestart, SIGNAL( clicked() ), this, SLOT( restart() ) ) ;
connect( &m_process, SIGNAL( finished(int, QProcess::ExitStatus) ),
this, SLOT( finished(int, QProcess::ExitStatus) ) ) ;
m_process.setProcessChannelMode( QProcess::MergedChannels );
}
MainWindow::~MainWindow()
{
delete ui;
}
void
MainWindow::start()
{
m_process.start( qPrintable( QApplication::applicationFilePath() ) ) ;
}
void
MainWindow::restart()
{
char *argv[2] ;
argv[0] = strdup( QApplication::applicationFilePath().toStdString().c_str() ) ;
argv[1] = NULL ;
execv( qPrintable( QApplication::applicationFilePath() ), argv ) ;
}
void
MainWindow::finished
(
int exitCode,
QProcess::ExitStatus exitStatus
)
{
qDebug() << "Finished!" ;
}