C. for (Alt+F4)

时间:2021-02-11 09:16:45

标签: c client-server signal-handling

在 C 编程中,ctrl+c 被视为信号中断,它关闭程序,我称之为优雅关闭。但是在一些不可预见的情况下,可以像ctrl+c退出一样处理服务器关闭吗?

历史:我有 2 台服务器,A 和 B。A 可以被视为中央服务器,它充当许多可以注册到它的服务器的存储库。现在,B 是同一网络上的另一台服务器,当它运行时,它向 A 注册。接下来,当我在 serverB 的终端实例上按 ctrl+c 时,服务器关闭并顺利地从中央服务器(A ).

但是,如果我只是关闭 B 的终端,服务器 A 会假设服务器 B 仍然处于活动状态,但实际上它已经终止了。

那么处理这个场景,有没有什么办法可以把alt+f4当成信号中断,让我复制一个顺利退出的场景?

任何指导都会有用。

提前致谢

1 个答案:

答案 0 :(得分:0)

正如我之前所说的,您可以通过调用为 SIGHUP 信号注册信号处理函数

signal(SIGINT,sig_handler)

另外,如果我没猜错的话,如果你使用 gcc 当然你可能会使用函数属性

__attribute__((destructor[(priority)]))

如果您实现了与所需服务器平滑断开连接的方法,它将适用于任何类型的程序终止(除 SEGFAULT)。

但信号处理程序仍然是最好的解决方案