package hcsshim import ( "io" "time" "github.com/Microsoft/hcsshim/internal/schema1" ) // ProcessConfig is used as both the input of Container.CreateProcess // and to convert the parameters to JSON for passing onto the HCS type ProcessConfig = schema1.ProcessConfig type Layer = schema1.Layer type MappedDir = schema1.MappedDir type MappedPipe = schema1.MappedPipe type HvRuntime = schema1.HvRuntime type MappedVirtualDisk = schema1.MappedVirtualDisk // AssignedDevice represents a device that has been directly assigned to a container // // NOTE: Support added in RS5 type AssignedDevice = schema1.AssignedDevice // ContainerConfig is used as both the input of CreateContainer // and to convert the parameters to JSON for passing onto the HCS type ContainerConfig = schema1.ContainerConfig type ComputeSystemQuery = schema1.ComputeSystemQuery // Container represents a created (but not necessarily running) container. type Container interface { // Start synchronously starts the container. Start() error // Shutdown requests a container shutdown, but it may not actually be shutdown until Wait() succeeds. Shutdown() error // Terminate requests a container terminate, but it may not actually be terminated until Wait() succeeds. Terminate() error // Waits synchronously waits for the container to shutdown or terminate. Wait() error // WaitTimeout synchronously waits for the container to terminate or the duration to elapse. It // returns false if timeout occurs. WaitTimeout(time.Duration) error // Pause pauses the execution of a container. Pause() error // Resume resumes the execution of a container. Resume() error // HasPendingUpdates returns true if the container has updates pending to install. HasPendingUpdates() (bool, error) // Statistics returns statistics for a container. Statistics() (Statistics, error) // ProcessList returns details for the processes in a container. ProcessList() ([]ProcessListItem, error) // MappedVirtualDisks returns virtual disks mapped to a utility VM, indexed by controller MappedVirtualDisks() (map[int]MappedVirtualDiskController, error) // CreateProcess launches a new process within the container. CreateProcess(c *ProcessConfig) (Process, error) // OpenProcess gets an interface to an existing process within the container. OpenProcess(pid int) (Process, error) // Close cleans up any state associated with the container but does not terminate or wait for it. Close() error // Modify the System Modify(config *ResourceModificationRequestResponse) error } // Process represents a running or exited process. type Process interface { // Pid returns the process ID of the process within the container. Pid() int // Kill signals the process to terminate but does not wait for it to finish terminating. Kill() error // Wait waits for the process to exit. Wait() error // WaitTimeout waits for the process to exit or the duration to elapse. It returns // false if timeout occurs. WaitTimeout(time.Duration) error // ExitCode returns the exit code of the process. The process must have // already terminated. ExitCode() (int, error) // ResizeConsole resizes the console of the process. ResizeConsole(width, height uint16) error // 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. Stdio() (io.WriteCloser, io.ReadCloser, io.ReadCloser, error) // 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. CloseStdin() error // Close cleans up any state associated with the process but does not kill // or wait on it. Close() error }