使用PPID 1重启Linux的Linux不会清理资源(套接字)

时间:2014-11-25 13:25:45

标签: c linux sockets process network-programming

系统重启linux后,我的网络应用程序恶魔与ppid 1没有拆除套接字连接。 然而,如果使用kill -9手动杀死那个恶魔,它会撕掉连接。

如果我使用nohup运行应用程序,我也会注意到相同的行为。在重新启动时,它不会拆除连接,因为当没有使用nohup时它会被拆除。

请提供指示如何为恶魔处理正确的清理资源。

2 个答案:

答案 0 :(得分:0)

如果您的服务器进程发送了KILL信号(即信号9),则无法进行任何清理。但是,通常情况下,服务提供一些触发干净关闭的方法。这可以是TERM信号(信号15)的适当处理程序的形式,这在任何情况下都是可取的。

此外,将服务设置为通过系统的服务管理子系统进行管理是明智的,无论是SystemV样式的init脚本,systemd还是其他任何其他选择。通过这种方式,您可以更好地控制系统重启或关闭期间系统关闭服务的方式和,以及在需要时手动管理服务更容易。

答案 1 :(得分:0)

这是一个有趣的问题。

TCP有效关闭需要发送FIN并等待FIN/ACK。显然,当系统被要求重启时,它不应该等待FIN/ACK。它仍然可以发送FINRST

但是,您的其他应用程序不得指望对等方在连接失败时发送FINRST。例如,如果从机器上拔下以太网电缆,并且您的应用程序没有发送任何数据,则永远不会通知对等方已断开连接。相反,您的应用程序应发送保持活动消息以检测断开的连接。