Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 重新定义信号处理缺陷_Linux_Ipc_Posix_Signals - Fatal编程技术网

Linux 重新定义信号处理缺陷

Linux 重新定义信号处理缺陷,linux,ipc,posix,signals,Linux,Ipc,Posix,Signals,这与设计决策有关,并了解采用其他服务的过程和缺点。因此,我们有两个服务,两个不相关的服务器,一个监听端口10000,另一个是xinetd服务器,通过3个不同的端口响应3个不同的请求(其客户端使用nc服务器port1 | port2 | port3检索数据) 有一天,由于安全问题,xinetd服务器不得不停止,而正是因为第一台服务器保留了相同的数据,我们决定采用xinetd服务器,向第一台服务器发送USR1信号,让它公开相同的公共数据。因此,需要添加逻辑来重新定义第一台服务器中的信号处理。我们计划

这与设计决策有关,并了解采用其他服务的过程和缺点。因此,我们有两个服务,两个不相关的服务器,一个监听端口10000,另一个是xinetd服务器,通过3个不同的端口响应3个不同的请求(其客户端使用nc服务器port1 | port2 | port3检索数据)


有一天,由于安全问题,xinetd服务器不得不停止,而正是因为第一台服务器保留了相同的数据,我们决定采用xinetd服务器,向第一台服务器发送USR1信号,让它公开相同的公共数据。因此,需要添加逻辑来重新定义第一台服务器中的信号处理。我们计划使用USR1(10、16和30),例如,在xinetd服务器中,kill-10 first_服务器将允许第一台服务器吐出旧服务器用来发出的相同数据,并且仍然转储到第一个端口。争论的焦点是,这是一个糟糕的设计,因为它滥用了unix信号的使用,当然重新定义了POXIS和Linux预定义的10、16和30 signum行为。这在技术上真的很糟糕吗?会对系统造成什么危害

10是SIGBUS,一个总线错误——你可能不应该碰那个。30和31是SIGUSR1和SIGUSR2,它们是用户定义的,不为任何特定目的保留。16是SIGURG,是插座上的紧急数据,您可能不需要,但最好使用31以上的实时信号。

10是SIGBUS,一个总线错误——您可能不应该碰那个。30和31是SIGUSR1和SIGUSR2,它们是用户定义的,不为任何特定目的保留。16是SIGURG,套接字上的紧急数据,您可能不需要,但最好使用31以上的实时信号。

我明白了。这很有道理。在这种情况下,如果我们改为使用未使用的信号,发送信号是处理IPC的一种好方法吗?信号中断操作,可以是好的(不必轮询),也可以是坏的(如果要处理信号,必须检查errno==EINTR)。我们的应用程序是一个rpc服务器,它以不同的方式处理SIGTERM(优雅停止,做一些额外的内部清理工作)和SIGHUP(重新加载配置和日志),除此之外,所有SIG都用作系统默认值。其中一个论点是,信号应该只用于通知进程改变内部状态,而不是传输信息,在这种情况下,它有点像进行rpc调用,但问题是我们不想编写服务器来侦听额外的三个端口。我明白了。这很有道理。在这种情况下,如果我们改为使用未使用的信号,发送信号是处理IPC的一种好方法吗?信号中断操作,可以是好的(不必轮询),也可以是坏的(如果要处理信号,必须检查errno==EINTR)。我们的应用程序是一个rpc服务器,它以不同的方式处理SIGTERM(优雅停止,做一些额外的内部清理工作)和SIGHUP(重新加载配置和日志),除此之外,所有SIG都用作系统默认值。其中一个论点是,信号应该只用于通知进程改变内部状态,而不是传输信息,在这种情况下,它有点像进行rpc调用,但问题是我们不想编写服务器来侦听额外的三个端口。