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

时间:2019-01-03 06:54:40

标签: c++ qt port

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

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

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

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

server->terminate();

问题在于,通过终止服务器进程,其使用的端口(即18383)将保持打开状态很多次。因此,当我尝试再次启动服务器时,出现以下错误:

  

“服务器-2无法设置服务器。监听tcp:18383:绑定:通常,每个套接字地址(协议/网络地址/端口)仅允许使用一种。

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

1 个答案:

答案 0 :(得分:1)

  

有时在终止过程时会收到以下错误:   QProcess:进程(“ ... server.exe ...”)仍然静止时销毁   正在运行

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

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

终止将发出有礼貌的“请您停止”信号,杀死将突然停止目标进程。服务器关闭需要多少时间(可能需要几秒钟)?因此您应该有足够的超时时间来考虑这一点。