终止进程并关闭其所有打开的监听端口
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 会突然停止目标进程。服务器关闭需要多长时间(可能是几秒钟)?所以你应该有一个慷慨的超时期限,考虑到这一点。
在我的 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 会突然停止目标进程。服务器关闭需要多长时间(可能是几秒钟)?所以你应该有一个慷慨的超时期限,考虑到这一点。