关于 C

问题描述

我明白在信号的帮助下,我们可以将中断传递给正在执行的 C 程序,并指导它们根据分配的处理程序进行操作。当按下 ctrl+c 时,执行 SIGINT。

目前我正在运行一个设置,其中我有 2 个系统。两者都有能够进行多播扩展(mDNS)的服务器(discoveryServers)。我已经使用了像 SIGHUP 和 SIGKILL 这样的信号。 我试图了解 SIGKILL 和 SIGHUP 在这里实际上做了什么。 所以在其中一个系统中,我有一个额外的服务器注册到本地发现服务器。该服务器在 mDNS 的帮助下在整个网络中进行广告。

现在,通过 SIGHUP,我可以看到检测到服务器的终端关闭并执行了相应的处理程序。 但是当我关闭系统时,该系统的服务器和发现服务器都应该关闭。但是通过 SIGHUP 检测到不一致(并非总是)。我尝试使用 SIGKILL,但响应仍然相同。目前还不清楚为什么会这样?

是不是因为 mDNS 使用的是 UDP 而 UDP 不可靠?

例如:将 A 和 B 视为两个系统。 A 和 B 都有正在运行的发现服务器(具有 mDNS:这意味着它们可以在整个网络中通告服务器记录),其中包含分别在其系统上运行的服务器列表。在 A 上运行的额外服务器(服务器 E)注册到 A 的发现服务器。现在注册的服务器记录也被公布。由于 mDNS,B 中的发现服务器还使用来自系统 A 的所有广告更新其缓存。B 可以被视为客户端,运行特定的 API,以获取在网络上运行的服务器列表。所有这些工作正常。

如果我故意关闭额外服务器的终端,SIGHUP 处理程序会顺利运行。我可以从两个发现服务器的日志中看到额外的服务器已被删除

现在如果我意外关闭系统 A,运行服务器应用程序的终端应该关闭。这可以通过 SIGHUP 处理程序来实现。我从系统 B 的日志中观察到,有时会彻底删除服务器,有时会部分删除

不清楚为什么会发生这种情况。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)