package libcontainerd import ( "os" "path/filepath" "github.com/pkg/errors" "golang.org/x/sys/unix" ) var fdNames = map[int]string{ unix.Stdin: "stdin", unix.Stdout: "stdout", unix.Stderr: "stderr", } func (p *process) pipeName(index int) string { return filepath.Join(p.root, p.id+"-"+fdNames[index]) } func (p *process) IOPaths() (string, string, string) { var ( stdin = p.pipeName(unix.Stdin) stdout = p.pipeName(unix.Stdout) stderr = p.pipeName(unix.Stderr) ) // TODO: debug why we're having zombies when I don't unset those if p.io.Stdin == nil { stdin = "" } if p.io.Stderr == nil { stderr = "" } return stdin, stdout, stderr } func (p *process) Cleanup() error { var retErr error // Ensure everything was closed p.CloseIO() for _, i := range [3]string{ p.pipeName(unix.Stdin), p.pipeName(unix.Stdout), p.pipeName(unix.Stderr), } { err := os.Remove(i) if err != nil { if retErr == nil { retErr = errors.Wrapf(err, "failed to remove %s", i) } else { retErr = errors.Wrapf(retErr, "failed to remove %s", i) } } } return retErr }