关于C语言中的信号

关于C语言中的信号,c,ubuntu,signals,mdns,C,Ubuntu,Signals,Mdns,我知道在信号的帮助下,我们可以将中断传递给正在执行的C程序,并指导它们按照指定的处理程序进行操作。按下ctrl+c时,执行SIGINT 目前我正在运行一个安装程序,其中我有两个系统。两者都有能够进行多播扩展(MDN)的服务器(DiscoveryServer)。我使用了SIGHUP和SIGKILL等信号。 我想了解西格尔和西格普在这里到底做了什么。 因此,在其中一个系统中,我有一个额外的服务器,可以注册到本地发现服务器。在MDN的帮助下,此服务器通过网络进行广告 现在,通过SIGHUP,我可以看到

我知道在信号的帮助下,我们可以将中断传递给正在执行的C程序,并指导它们按照指定的处理程序进行操作。按下ctrl+c时,执行SIGINT

目前我正在运行一个安装程序,其中我有两个系统。两者都有能够进行多播扩展(MDN)的服务器(DiscoveryServer)。我使用了SIGHUP和SIGKILL等信号。 我想了解西格尔和西格普在这里到底做了什么。 因此,在其中一个系统中,我有一个额外的服务器,可以注册到本地发现服务器。在MDN的帮助下,此服务器通过网络进行广告

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

是因为MDN使用UDP,而UDP不可靠吗

将A和B视为两个系统。A和B都有运行的DiscoveryServer(能够使用MDN:这意味着它们可以在整个网络中公布服务器记录),其中分别包含在其系统上运行的服务器列表。在A上运行的额外服务器(服务器E)注册到A的发现服务器。现在,注册的服务器记录也会播发。由于MDN,B中的发现服务器还使用系统A中的所有广告更新其缓存。B可以被视为客户端,运行特定的API,以获取netowrk上运行的服务器列表。所有这些都很好

如果我故意关闭额外服务器的终端,SIGHUP处理程序将正常工作。我可以从两台发现服务器的日志中看到,额外的服务器已被删除

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


目前还不清楚发生这种情况的原因。

如果关闭系统,进程将被终止。我遗漏了什么吗?不要使用SIGKILL,除非你想让这个过程结束。你抓不到SIGKILL。@佐索:我已经用这个例子更新了这个问题scenario@JonathanLeffler当您提到“不能捕获SIGKILL”时,是否意味着没有执行相应的处理程序?“抓不到”是什么意思?对不起,只是一个初学者。您无法有效地设置函数以响应SIGKILL。假设发送信号的进程具有适当的权限,则向其发送SIGKILL的进程将无条件终止。