当进程仍在运行时,QProcess声明进程退出

时间:2016-01-24 16:19:38

标签: c++ qt qprocess

我使用QThreadQProcess启动Linux中的外部GUI应用程序。该过程成功进入起始状态(QProcess::Starting),然后进入运行状态(QProcess::Running),然后,之后,进入停止状态(QProcess::NotRunning,由连接的插槽验证到stateChanged(QProcess::ProcessState)信号)。 QProcess::errorString()返回"未知错误。"外部流程仍在运行,但QProcess对象未显示为正在运行。

大多数应用程序都会发生这种情况,但我发现Dolphin文件管理器和xterm没有出现此行为。可能还有其他工作也可以。我正在使用Qt 5.4.0和Debian 8.2 Jessie,GCC 4.9.2。

有谁知道为什么会这样?不幸的是,我无法发布完整的示例,因为这需要发布几乎整个应用程序。

class RecordingControllerObject : public QObject
{
    Q_OBJECT

public:
    RecordingControllerObject(QObject *parent = 0)
        : QObject(parent)
        ...
        , proc(new QProcess(this))
        ...
    {
        ...
        connect(proc, SIGNAL(stateChanged(QProcess::ProcessState)), SLOT(procStateChanged(QProcess::ProcessState)));
        ...
    }
    virtual ~RecordingControllerObject()
    {
        ...
        if (proc->state() == QProcess::Running)
        {
            proc->terminate();
            proc->waitForFinished(-1);
        }
        delete proc;
        ...
    }

    ...

signals:
    ...

public slots:
    ...

    void startWatcher(const QString &program, const QStringList &arguments)
    {
        qDebug("starting watcher\n");
        if (proc->state() == QProcess::Running)
            proc->kill();
        proc->start(program, arguments);
    }

private slots:
    void readyRead(const QByteArray &buffer)
    {
        if (proc->isOpen())
            proc->write(buffer);
    }

    void procStateChanged(QProcess::ProcessState state)
    {
        std::cout << "proc state changed: " << state << std::endl;
        std::cout << "proc error: " << proc->errorString().toUtf8().constData() << std::endl;
    }

    ...

private:
    ...
    QProcess *proc;
    ...
};

0 个答案:

没有答案