C 中的自定义信号处理程序(Alt+F4)
Custom Signal handler in C. for (Alt+F4)
在C编程中,ctrl+c被视为信号中断,它关闭程序,我称之为优雅关闭。但是在某些不可预见的情况下,服务器关闭是否可以像ctrl+c退出一样处理?
历史:我有 2 个服务器,A 和 B。A 可以被认为是一个中央服务器,它就像一个可以注册到它的许多服务器的存储库。现在,B 是同一网络上的另一台服务器,当它运行时,它向 A 注册。接下来,当我在 serverB 的终端实例上按 ctrl+c 时,服务器关闭并从中央服务器顺利注销自身(A ).
但是,如果我只是关闭B的终端,服务器A会认为服务器B仍然处于活动状态,但实际上它已经终止了。
所以要处理这种情况,有没有办法将 alt+f4 视为信号中断,以便我复制顺利退出的情况?
任何指导都会有用。
提前致谢
正如我之前告诉大家的那样,您可以通过调用为 SIGHUP 信号注册信号处理函数
signal(SIGINT,sig_handler)
此外,如果我没记错的话,如果你使用 gcc,当然你可以使用函数属性
__attribute__((destructor[(priority)]))
如果您实现了与所需服务器顺利断开连接的功能,它将适用于任何类型的程序终止(SEGFAULT 除外)。
但信号处理程序仍然是最佳解决方案
在C编程中,ctrl+c被视为信号中断,它关闭程序,我称之为优雅关闭。但是在某些不可预见的情况下,服务器关闭是否可以像ctrl+c退出一样处理?
历史:我有 2 个服务器,A 和 B。A 可以被认为是一个中央服务器,它就像一个可以注册到它的许多服务器的存储库。现在,B 是同一网络上的另一台服务器,当它运行时,它向 A 注册。接下来,当我在 serverB 的终端实例上按 ctrl+c 时,服务器关闭并从中央服务器顺利注销自身(A ).
但是,如果我只是关闭B的终端,服务器A会认为服务器B仍然处于活动状态,但实际上它已经终止了。
所以要处理这种情况,有没有办法将 alt+f4 视为信号中断,以便我复制顺利退出的情况?
任何指导都会有用。
提前致谢
正如我之前告诉大家的那样,您可以通过调用为 SIGHUP 信号注册信号处理函数
signal(SIGINT,sig_handler)
此外,如果我没记错的话,如果你使用 gcc,当然你可以使用函数属性
__attribute__((destructor[(priority)]))
如果您实现了与所需服务器顺利断开连接的功能,它将适用于任何类型的程序终止(SEGFAULT 除外)。
但信号处理程序仍然是最佳解决方案