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

C++ 终止进程并关闭其所有打开的侦听端口,c++,qt,port,C++,Qt,Port,在我的Qt应用程序上,我在一个单独的进程上运行一个外部可执行文件,如下所示: QProcess *server = new QProcess(); server->start("./server.exe"); server->terminate(); 外部可执行文件在127.0.0.1上启动服务器,监听端口18383 然后在某个时刻,我会像这样终止这个过程: QProcess *server = new QProcess(); server->start("./server

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

QProcess *server = new QProcess();
server->start("./server.exe");
server->terminate();
外部可执行文件在127.0.0.1上启动服务器,监听端口18383

然后在某个时刻,我会像这样终止这个过程:

QProcess *server = new QProcess();
server->start("./server.exe");
server->terminate();
问题是,通过终止服务器进程,其使用的端口(即18383)多次保持打开状态。因此,当我再次尝试启动服务器时,会收到以下错误:

服务器-2无法安装服务器。侦听tcp:18383:bind:每个套接字地址协议/网络地址/端口通常只允许使用一次

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

有时我在终止进程时收到以下错误: QProcess:在处理过程中被销毁。。。server.exe。。。还是 运行

看起来您并不是在等待流程正常终止。 以下是终止您启动的进程的一般方法:

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

终止将发送一个礼貌的可请停止信号,终止将突然停止目标进程。服务器关闭需要多长时间?可能需要几秒钟?所以你应该有一个宽大的超时时间来考虑这一点。

终止调用真的会终止进程吗?@Michael嗯,有时候我在终止进程时会收到这些错误:QProcess:Distromed while process。。。server.exe。。。仍在运行在这种情况下,进程对象将在实际进程仍在运行时被销毁。你应该试试优雅的退出方式。@Michael谢谢!我将进一步研究QProcess文档,看看是否可以使用它的API实现优雅的退出。尝试使用SO_REUSEADDR打开端口,您可能会遇到侦听端口保持打开一段时间以允许接收飞行中的tcp数据包的情况谢谢!错误QProcess:在进程仍在运行时被销毁已得到解决:但是,我不确定是否会再次在tcp端口上收到服务器-2错误。我希望我不会!如果服务器没有泄漏网络资源,则应该没有问题。