【问题标题】:Program doesn't stop when "ctrl c" is used to terminate program使用“ctrl c”终止程序时程序不会停止
【发布时间】:2014-07-10 01:14:48
【问题描述】:

我有一个使用 tcp 套接字进行通信的程序(C++ 编译)。该程序配置为两种模式。假设模式 A 和模式 B。

启动程序模式A,它会给出一些打印如下:

waiting connections on port 1234
local endpoint : 0.0.0.0:1234
//I think it is using boost for TCP socket 

然后启动模式B。他们会找到彼此并完美运行。

问题是如果我启动模式 A,然后使用“ctrl c”以模式 A 终止应用程序。它将在那里打开端口。

当我启动模式B时,由于A不存在,它也会找到连接并运行错误。

我有一个 bash 来运行应用程序,我想问一下如何强制关闭该端口? (以 bash 或其他可能的方式)

谢谢

【问题讨论】:

  • 如果您使用netstat -a -n,您在所有列的输出中看到了什么?在这些情况下,该州是否偶然被列为TIME_WAIT
  • 嗨@Jeff 它显示如下:tcp 0 0 0.0.0.0:1234 0.0.0.0:* LISTEN
  • 可以修改C++代码吗?如果该程序在退出之前自行清理会更好。
  • 嗨@chepner 是的,我可以修改 C++ 代码并重新编译它。我在想 C++ 应用程序不能这样做,因为 ctrl c 终止了整个程序。你有什么建议吗?
  • 你试过我的答案了吗?

标签: c++ bash sockets boost tcp


【解决方案1】:

在 bash 脚本中使用它(在调用二进制文件之前):

trap "fuser -k -n tcp 1234 && exit" SIGINT SIGTERM

【讨论】:

  • 当且仅当 OP 没有该程序的源时,这将是在错误程序后进行清理的合理尝试。这不应该用来代替在 OP 的二进制文件中正确处理 SIGINT 和 SIGTERM。
猜你喜欢
  • 2011-08-19
  • 1970-01-01
  • 1970-01-01
  • 2014-10-19
  • 1970-01-01
  • 1970-01-01
  • 2011-09-19
  • 1970-01-01
  • 2011-11-16
相关资源
最近更新 更多