4785f1a7ab
Signed-off-by: Yong Tang <yong.tang.github@outlook.com>
59 lines
1.1 KiB
Go
59 lines
1.1 KiB
Go
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
|
|
}
|