【发布时间】:2014-11-25 13:25:45
【问题描述】:
在系统重新启动 linux 时,我的 ppid 1 网络应用程序恶魔不会断开套接字连接。 但是,如果手动使用 kill -9 杀死该恶魔,它会断开连接。
如果我使用 nohup 运行应用程序,我也会注意到相同的行为。重新启动时它不会断开连接,而在不使用 nohup 时它会断开连接。
请提供指针如何为恶魔处理适当的清理资源。
【问题讨论】:
-
您是否有一些脚本或任何在您重新启动时向这些进程发出信号的东西?为什么您希望这些进程以其他方式终止连接?
-
信号 9 无法被捕获。接收到该信号的进程将立即被内核终止,而不会调用任何关闭挂钩。如果这实际上是您想要的行为,那么您声称在系统重新启动时不会发生这种情况(并且您没有提供更干净的关机)根本不可信。
-
当我的进程终止时,应该在 tcp 层 FIN FIN-ACK 中进行适当的握手,以便正确关闭 tcp。这没有发生,因此另一端 netstat 显示连接已建立,尽管系统已重新启动。 linux 使用 PPID 1 终止进程的方式似乎有些不同。
-
@JohnBollinger。我没有执行程序来正确关闭打开的套接字。但是我看到正常应用程序的正确关闭,其父级在重新启动时是 bash shell。但是,如果我使用 nohup 或在启动期间运行相同的应用程序,则 PPID 将为 1。在这种情况下,操作系统不会自动清理套接字。
标签: c linux sockets process network-programming