终止进程并关闭其所有打开的监听端口

Terminate a process and close all its opened listening ports

在我的 Qt 应用程序中,我 运行 在单独的进程上运行一个外部可执行文件,如下所示:

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

外部可执行文件在 127.0.0.1 上启动一个服务器,监听端口 18383

然后在某个时候,我这样终止进程:

server->terminate();

问题是,通过终止服务器进程,它使用的端口,即 18383 多次保持打开状态。因此,当我尝试再次启动服务器时,我收到以下错误:

"Server -2 Could not setup server. listen tcp :18383: bind: Only one usage of each socket address (protocol/network address/port) is normally permitted.

如何终止进程并关闭所有打开的监听端口?

sometimes I receive these errors while terminating the process: QProcess: Destroyed while process (" ... server.exe ...") is still running

您似乎没有在等待进程正常终止。 这是终止您启动的进程的通用方法:

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

Terminate 会发出礼貌的 "can you please stop" 信号,kill 会突然停止目标进程。服务器关闭需要多长时间(可能是几秒钟)?所以你应该有一个慷慨的超时期限,考虑到这一点。