Завершить процесс и закрыть все открытые порты прослушивания - PullRequest
0 голосов
/ 03 января 2019

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

QProcess *server = new QProcess();
server->start("./server.exe");

Внешний исполняемый файл запускает сервер на 127.0.0.1, прослушивая порт 18383.

Затем в какой-то момент я завершаю процесс следующим образом:

server->terminate();

Проблема заключается в том, что при завершении процесса сервера его используемый порт много раз, т. Е. 18383, остается открытым.Следовательно, когда я пытаюсь запустить сервер снова, я получаю следующие ошибки:

"Сервер -2 Не удалось настроить сервер. Listen tcp: 18383: bind: Только одно использование каждого адреса сокета (протокол/ сетевой адрес / порт) обычно разрешен.

Как я могу завершить процесс и закрыть все его открытые порты прослушивания?

1 Ответ

0 голосов
/ 03 января 2019

иногда я получаю эти ошибки при завершении процесса: QProcess: уничтожен, пока процесс ("... server.exe ...") все еще работает

Кажется, вы не ждете, пока процесс завершится изящно. Вот общий способ завершить запущенный вами процесс:

server->terminate(); 
server->waitForFinished(timeoutMS);
if (server->state() == QProcess::Running) {
     server->kill();
}

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...