diff --git a/execdriver/native/driver.go b/execdriver/native/driver.go index f2d7ed8ae2..ff96510262 100644 --- a/execdriver/native/driver.go +++ b/execdriver/native/driver.go @@ -15,6 +15,7 @@ import ( "strconv" "strings" "syscall" + "time" ) const ( @@ -121,12 +122,22 @@ func (d *driver) Restore(c *execdriver.Command) error { } f.Close() - proc, err := os.FindProcess(nspid) - if err != nil { - return err + if _, err := os.FindProcess(nspid); err != nil { + return fmt.Errorf("finding existing pid %d %s", nspid, err) } - _, err = proc.Wait() - return err + c.Process = &os.Process{ + Pid: nspid, + } + + for _ = range time.Tick(500 * time.Millisecond) { + if err := syscall.Kill(nspid, 0); err != nil { + if strings.Contains(err.Error(), "no such process") { + return nil + } + return fmt.Errorf("signal error %s", err) + } + } + return nil } func (d *driver) Info(id string) execdriver.Info { diff --git a/pkg/libcontainer/nsinit/init.go b/pkg/libcontainer/nsinit/init.go index cfc5058559..cc481e2cc8 100644 --- a/pkg/libcontainer/nsinit/init.go +++ b/pkg/libcontainer/nsinit/init.go @@ -50,9 +50,11 @@ func (ns *linuxNs) Init(container *libcontainer.Container, uncleanRootfs, consol } } - if err := system.ParentDeathSignal(); err != nil { - return fmt.Errorf("parent deth signal %s", err) - } + /* + if err := system.ParentDeathSignal(); err != nil { + return fmt.Errorf("parent death signal %s", err) + } + */ if err := setupNewMountNamespace(rootfs, console, container.ReadonlyFs); err != nil { return fmt.Errorf("setup mount namespace %s", err) }