使用批处理重启c ++控制台应用程序不会关闭网络连接

时间:2016-10-26 09:39:04

标签: c++ windows batch-file poco-libraries

我需要通过代码重启我的应用程序,我选择使用批处理文件。 当应用程序启动时,它会创建一个这样的批处理:

taskkill /f /im AudioService.exe
TIMEOUT 10
start "AudioService" "AudioService.exe"

然后我从代码中调用它(使用Poco Library):

Poco::Process::Args args;
Poco::Process::launch(RESTART_SCRIPT_NAME, args);

现在,它的工作原理是网络连接没有关闭,而且当应用程序重启时,Bind()函数失败。

相反,如果我从资源管理器“手动”运行批处理文件,则所有工作都按预期工作:应用程序及其网络连接被终止。

有人可以告诉我为什么会发生这种情况吗?

1 个答案:

答案 0 :(得分:0)

如果应用程序在没有关闭其句柄的情况下关闭,则操作系统负责处理它。操作系统决定关闭句柄取决于操作系统,而不是您的应用程序,因此您可能需要等待一段时间才能清理它们。

您可能希望查找哪些信号处理程序,以便您的应用程序可以确保它始终清理干净