From bb5ce7ac23c2d64a1828cc29102633295248de6a Mon Sep 17 00:00:00 2001 From: niusmallnan Date: Thu, 1 Nov 2018 16:06:06 +0800 Subject: [PATCH] Fix dhcpcd zoombie issue --- cmd/cloudinitsave/cloudinitsave.go | 3 +++ cmd/network/network.go | 9 ++++++++- pkg/netconf/netconf_linux.go | 11 ++++++++++- 3 files changed, 21 insertions(+), 2 deletions(-) diff --git a/cmd/cloudinitsave/cloudinitsave.go b/cmd/cloudinitsave/cloudinitsave.go index 51d4acd4..fd2af739 100644 --- a/cmd/cloudinitsave/cloudinitsave.go +++ b/cmd/cloudinitsave/cloudinitsave.go @@ -65,6 +65,9 @@ func Main() { if err := saveCloudConfig(); err != nil { log.Errorf("Failed to save cloud-config: %v", err) } + + // exit dhcpcd + netconf.StopDhcpcd() } func saveCloudConfig() error { diff --git a/cmd/network/network.go b/cmd/network/network.go index b4f89a8f..47a5294b 100644 --- a/cmd/network/network.go +++ b/cmd/network/network.go @@ -2,6 +2,9 @@ package network import ( "io/ioutil" + "os" + "os/signal" + "syscall" "github.com/rancher/os/config" "github.com/rancher/os/pkg/docker" @@ -29,7 +32,11 @@ func Main() { log.Error(err) } - select {} + signalChan := make(chan os.Signal, 1) + signal.Notify(signalChan, syscall.SIGTERM) + <-signalChan + log.Info("Received SIGTERM, shutting down") + netconf.StopDhcpcd() } func ApplyNetworkConfig(cfg *config.CloudConfig) { diff --git a/pkg/netconf/netconf_linux.go b/pkg/netconf/netconf_linux.go index 007932fa..795b85b1 100644 --- a/pkg/netconf/netconf_linux.go +++ b/pkg/netconf/netconf_linux.go @@ -25,6 +25,7 @@ const ( var ( defaultDhcpArgs = []string{"dhcpcd", "-MA4"} + exitDhcpArgs = []string{"dhcpcd", "-x"} dhcpReleaseCmd = "dhcpcd --release" ) @@ -527,5 +528,13 @@ func GetValidLinkList() ([]netlink.Link, error) { } return validLinkList, nil - +} + +func StopDhcpcd() { + cmd := exec.Command(exitDhcpArgs[0], exitDhcpArgs[1:]...) + cmd.Stdout = os.Stdout + cmd.Stderr = os.Stderr + if err := cmd.Run(); err != nil { + log.Errorf("Failed to run command [%v]: %v", cmd, err) + } }