2016-09-30 2 views
0

Моя проблема заключается в том, что я начинаю исполняемый в QProcess, как следующее:QProcess ехе не закрывается, если программа закончена

QProcess Work; 
Work.start(program.exe); 

Этот исполняемый файл пробегов, так как он был запущен в фоновом режиме, и я могу посылать запросы Это. Если я закончил я закрываю исполняемому следующим образом:

Work.close(); 

Но если я смотрю на Taskmanager program.exe работает более того. Я не понимаю этого поведения, потому что я думал, что исполняемый файл будет остановлен, если я закрою процесс.

+1

С близким вы просто закончите общение с процессом, вы не убиваете его – demonplus

+0

Что именно * * * 'program.exe' и как вы обычно его завершаете, если запускаете его в командной строке? –

+0

program.exe - это программа, которая запускает параллельный поток для связи с другим IP-адресом. У исполняемого файла есть команда, и я думаю, что буду использовать эту команду, потому что обнаружил, что убийство процесса очень плохое. – Lehtim

ответ

0

Вы должны использовать void QProcess::terminate() или void QProcess::kill() для этого.

terminate() - попытки прекратить процесс.

kill() - убивает процесс немедленно.

+0

И даже terminate() или kill() работают только для некоторых программ не для всех – demonplus

+1

в unix 'kill()' посылают сигнал SIGKILL. Этот сигнал нельзя поймать или проигнорировать, и процесс приема не может выполнить очистку при получении этого сигнала. Есть только несколько редких случаев, когда SIGKILL не работает. –

+0

Мы точно не знаем платформу – demonplus

0

У меня был очень похожий случай, хотя я работал над linux, встроенным в QT 4.8. Не уверен, что это может вам помочь, но поскольку я не могу добавить комментарий, я должен сделать отдельный ответ.

Установлен ли родитель для QProcess? В моем случае, я инстанцирован QProcess как этот

QProcess *p = new QProcess; 

и я мог видеть в списке запущенных процессов, что каждый раз, когда я реализованный новый QProcess, я получил новый процесс, который не может быть закрыт близко(), конец() или kill(). Когда я, наконец, переписал код, как этот

QProcess *p = new QProcess(mainW); //mainW was my GUI class, which handled also the closing of the process 

проблема решается сама, я даже не нужно вызвать любую функцию, чтобы закрыть процесс. В моем случае я был уверен, что процессы, которые я назвал, заканчиваются, поскольку почти все они были аудиофайлами, поэтому я слышал, как они заканчивают. Другие были процессами, которые моя программа ждала, чтобы закончить, так что снова я был уверен, что они закончились, потому что моя программа не застряла в ожидании их,

Надеюсь, это поможет, несмотря на разную ОС.