在我的Qt应用程序上,我在一个单独的进程上运行一个外部可执行文件,如下所示:
QProcess *server = new QProcess();
server->start("./server.exe");
外部可执行文件在127.0.0.1
上启动服务器,并监听端口18383
。
然后在某个时候,我像这样终止进程:
server->terminate();
问题在于,通过终止服务器进程,其使用的端口(即18383
)将保持打开状态很多次。因此,当我尝试再次启动服务器时,出现以下错误:
“服务器-2无法设置服务器。监听tcp:18383:绑定:通常,每个套接字地址(协议/网络地址/端口)仅允许使用一种。
如何终止进程并关闭所有打开的监听端口?
答案 0 :(得分:1)
有时在终止过程时会收到以下错误: QProcess:进程(“ ... server.exe ...”)仍然静止时销毁 正在运行
似乎您不是在等待进程正常终止。 这是终止您启动的进程的通用方法:
server->terminate();
server->waitForFinished(timeoutMS);
if (server->state() == QProcess::Running) {
server->kill();
}
终止将发出有礼貌的“请您停止”信号,杀死将突然停止目标进程。服务器关闭需要多少时间(可能需要几秒钟)?因此您应该有足够的超时时间来考虑这一点。