Remove sigchld reaper from containerd process
Because we are launching alot of different runc commands to do operations there is a race between doing a `cmd.Wait()` and getting the sigchld and reaping it. We can remove the sigchild reaper from containerd as long as we make sure we reap the shim process if we are the parent, i.e. not restored. Signed-off-by: Michael Crosby <crosbymichael@gmail.com>
This commit is contained in:
@@ -134,10 +134,7 @@ func daemon(context *cli.Context) error {
|
||||
// setup a standard reaper so that we don't leave any zombies if we are still alive
|
||||
// this is just good practice because we are spawning new processes
|
||||
s := make(chan os.Signal, 2048)
|
||||
signal.Notify(s, syscall.SIGCHLD, syscall.SIGTERM, syscall.SIGINT)
|
||||
if err := osutils.SetSubreaper(1); err != nil {
|
||||
logrus.WithField("error", err).Error("containerd: set subpreaper")
|
||||
}
|
||||
signal.Notify(s, syscall.SIGTERM, syscall.SIGINT)
|
||||
sv, err := supervisor.New(
|
||||
context.String("state-dir"),
|
||||
context.String("runtime"),
|
||||
@@ -169,10 +166,6 @@ func daemon(context *cli.Context) error {
|
||||
}
|
||||
for ss := range s {
|
||||
switch ss {
|
||||
case syscall.SIGCHLD:
|
||||
if _, err := osutils.Reap(); err != nil {
|
||||
logrus.WithField("error", err).Warn("containerd: reap child processes")
|
||||
}
|
||||
default:
|
||||
logrus.Infof("stopping containerd after receiving %s", ss)
|
||||
server.Stop()
|
||||
|
||||
Reference in New Issue
Block a user