2015-07-06 3 views
-2

В настоящее время я работаю над проектом с Qt5.4 и C++. В этом проекте я запускаю и останавливаю процессы с классом QProcess.QProcess завершает дерево процессов

Я теперь расширяю проект для запуска пакетных файлов. Проблема в том, что я хочу завершить/убить процессы, запущенные с помощью командного файла, используя QProcess. Calling terminate не работает (или, может быть, я это неправильно)

Редактировать: QProcess является членом (указателем) класса ProcessHolder. startProcess() и stopProcess() обрабатывают процесс.

bool ProcessHolder::startProcess(const QString &path, 
           const QStringList &args) { 
    process_->start(path, args); 
    qDebug() << process_->errorString(); 
    if(process_->waitForStarted(1000)) { 
     state_ = ProcessState::running; 
     return true; 
    } else { 
     state_ = ProcessState::fail; 
     return false; 
    } 
} 

bool ProcessHolder::stopProcess() { 
    process_->terminate(); 
    state_ = ProcessState::notRunning; 
    return true; 
} 

Пожалуйста, помогите мне, Бен

+2

* «Вызов завершения не работает» * - это зависит от того, как вы вызываете QProcess. Если, например, вы используете статическую функцию QProcess :: execute, то, конечно, она не будет работать. Я предлагаю вам показать пример кода того, что вы пытаетесь сделать. – TheDarkKnight

ответ

0

Так Qt не предоставляет anwser для такого рода проблемы. Кажется, что у Windows нет правильной реализации дерева процессов.

Вы можете использовать CreateToolhelp32Snapshot для просмотра всех процессов и родительских процессов.

тогда вы должны построить дерево и удалить его вручную. Вы можете использовать QProcess :: processID(), чтобы получить корневой процесс для этого дерева.

Смежные вопросы