 1f8db2467b
			
		
	
	1f8db2467b
	
	
	
		
			
			This contains quite a bit (also bumps google/uuid to 1.3.0). Some HostProcess container improvements to get ready for whenever it goes to stable in Kubernetes, Hyper-V (windows) container support for CRI, and a plethora of other small additions and fixes. Signed-off-by: Daniel Canter <dcanter@microsoft.com>
		
			
				
	
	
		
			101 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			101 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| //go:build windows
 | |
| 
 | |
| package hcsshim
 | |
| 
 | |
| import (
 | |
| 	"context"
 | |
| 	"io"
 | |
| 	"sync"
 | |
| 	"time"
 | |
| 
 | |
| 	"github.com/Microsoft/hcsshim/internal/hcs"
 | |
| )
 | |
| 
 | |
| // ContainerError is an error encountered in HCS
 | |
| type process struct {
 | |
| 	p        *hcs.Process
 | |
| 	waitOnce sync.Once
 | |
| 	waitCh   chan struct{}
 | |
| 	waitErr  error
 | |
| }
 | |
| 
 | |
| // 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 {
 | |
| 	found, err := process.p.Kill(context.Background())
 | |
| 	if err != nil {
 | |
| 		return convertProcessError(err, process)
 | |
| 	}
 | |
| 	if !found {
 | |
| 		return &ProcessError{Process: process, Err: ErrElementNotFound, Operation: "hcsshim::Process::Kill"}
 | |
| 	}
 | |
| 	return nil
 | |
| }
 | |
| 
 | |
| // 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 {
 | |
| 	process.waitOnce.Do(func() {
 | |
| 		process.waitCh = make(chan struct{})
 | |
| 		go func() {
 | |
| 			process.waitErr = process.Wait()
 | |
| 			close(process.waitCh)
 | |
| 		}()
 | |
| 	})
 | |
| 	t := time.NewTimer(timeout)
 | |
| 	defer t.Stop()
 | |
| 	select {
 | |
| 	case <-t.C:
 | |
| 		return &ProcessError{Process: process, Err: ErrTimeout, Operation: "hcsshim::Process::Wait"}
 | |
| 	case <-process.waitCh:
 | |
| 		return process.waitErr
 | |
| 	}
 | |
| }
 | |
| 
 | |
| // 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(context.Background(), 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.StdioLegacy()
 | |
| 	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(context.Background()), 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)
 | |
| }
 |