mirror of
https://github.com/k3s-io/k3s.git
synced 2024-06-07 19:41:36 +00:00
73 lines
2.2 KiB
Go
73 lines
2.2 KiB
Go
|
package hcsshim
|
||
|
|
||
|
import (
|
||
|
"io"
|
||
|
"time"
|
||
|
|
||
|
"github.com/Microsoft/hcsshim/internal/hcs"
|
||
|
)
|
||
|
|
||
|
// ContainerError is an error encountered in HCS
|
||
|
type process struct {
|
||
|
p *hcs.Process
|
||
|
}
|
||
|
|
||
|
// Pid returns the process ID of the process within the container.
|
||
|
func (process *process) Pid() int {
|
||
|
return process.p.Pid()
|
||
|
}
|
||
|
|
||
|
// Kill signals the process to terminate but does not wait for it to finish terminating.
|
||
|
func (process *process) Kill() error {
|
||
|
return convertProcessError(process.p.Kill(), process)
|
||
|
}
|
||
|
|
||
|
// Wait waits for the process to exit.
|
||
|
func (process *process) Wait() error {
|
||
|
return convertProcessError(process.p.Wait(), process)
|
||
|
}
|
||
|
|
||
|
// WaitTimeout waits for the process to exit or the duration to elapse. It returns
|
||
|
// false if timeout occurs.
|
||
|
func (process *process) WaitTimeout(timeout time.Duration) error {
|
||
|
return convertProcessError(process.p.WaitTimeout(timeout), process)
|
||
|
}
|
||
|
|
||
|
// ExitCode returns the exit code of the process. The process must have
|
||
|
// already terminated.
|
||
|
func (process *process) ExitCode() (int, error) {
|
||
|
code, err := process.p.ExitCode()
|
||
|
if err != nil {
|
||
|
err = convertProcessError(err, process)
|
||
|
}
|
||
|
return code, err
|
||
|
}
|
||
|
|
||
|
// ResizeConsole resizes the console of the process.
|
||
|
func (process *process) ResizeConsole(width, height uint16) error {
|
||
|
return convertProcessError(process.p.ResizeConsole(width, height), process)
|
||
|
}
|
||
|
|
||
|
// Stdio returns the stdin, stdout, and stderr pipes, respectively. Closing
|
||
|
// these pipes does not close the underlying pipes; it should be possible to
|
||
|
// call this multiple times to get multiple interfaces.
|
||
|
func (process *process) Stdio() (io.WriteCloser, io.ReadCloser, io.ReadCloser, error) {
|
||
|
stdin, stdout, stderr, err := process.p.Stdio()
|
||
|
if err != nil {
|
||
|
err = convertProcessError(err, process)
|
||
|
}
|
||
|
return stdin, stdout, stderr, err
|
||
|
}
|
||
|
|
||
|
// CloseStdin closes the write side of the stdin pipe so that the process is
|
||
|
// notified on the read side that there is no more data in stdin.
|
||
|
func (process *process) CloseStdin() error {
|
||
|
return convertProcessError(process.p.CloseStdin(), process)
|
||
|
}
|
||
|
|
||
|
// Close cleans up any state associated with the process but does not kill
|
||
|
// or wait on it.
|
||
|
func (process *process) Close() error {
|
||
|
return convertProcessError(process.p.Close(), process)
|
||
|
}
|