github.com/containerd/containerd@v22.0.0-20200918172823-438c87b8e050+incompatible/runtime/task.go (about)

     1  /*
     2     Copyright The containerd Authors.
     3  
     4     Licensed under the Apache License, Version 2.0 (the "License");
     5     you may not use this file except in compliance with the License.
     6     You may obtain a copy of the License at
     7  
     8         http://www.apache.org/licenses/LICENSE-2.0
     9  
    10     Unless required by applicable law or agreed to in writing, software
    11     distributed under the License is distributed on an "AS IS" BASIS,
    12     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    13     See the License for the specific language governing permissions and
    14     limitations under the License.
    15  */
    16  
    17  package runtime
    18  
    19  import (
    20  	"context"
    21  	"time"
    22  
    23  	"github.com/gogo/protobuf/types"
    24  )
    25  
    26  // TaskInfo provides task specific information
    27  type TaskInfo struct {
    28  	ID        string
    29  	Runtime   string
    30  	Spec      []byte
    31  	Namespace string
    32  }
    33  
    34  // Process is a runtime object for an executing process inside a container
    35  type Process interface {
    36  	// ID of the process
    37  	ID() string
    38  	// State returns the process state
    39  	State(context.Context) (State, error)
    40  	// Kill signals a container
    41  	Kill(context.Context, uint32, bool) error
    42  	// Pty resizes the processes pty/console
    43  	ResizePty(context.Context, ConsoleSize) error
    44  	// CloseStdin closes the processes stdin
    45  	CloseIO(context.Context) error
    46  	// Start the container's user defined process
    47  	Start(context.Context) error
    48  	// Wait for the process to exit
    49  	Wait(context.Context) (*Exit, error)
    50  	// Delete deletes the process
    51  	Delete(context.Context) (*Exit, error)
    52  }
    53  
    54  // Task is the runtime object for an executing container
    55  type Task interface {
    56  	Process
    57  
    58  	// PID of the process
    59  	PID() uint32
    60  	// Namespace that the task exists in
    61  	Namespace() string
    62  	// Pause pauses the container process
    63  	Pause(context.Context) error
    64  	// Resume unpauses the container process
    65  	Resume(context.Context) error
    66  	// Exec adds a process into the container
    67  	Exec(context.Context, string, ExecOpts) (Process, error)
    68  	// Pids returns all pids
    69  	Pids(context.Context) ([]ProcessInfo, error)
    70  	// Checkpoint checkpoints a container to an image with live system data
    71  	Checkpoint(context.Context, string, *types.Any) error
    72  	// Update sets the provided resources to a running task
    73  	Update(context.Context, *types.Any) error
    74  	// Process returns a process within the task for the provided id
    75  	Process(context.Context, string) (Process, error)
    76  	// Stats returns runtime specific metrics for a task
    77  	Stats(context.Context) (*types.Any, error)
    78  }
    79  
    80  // ExecOpts provides additional options for additional processes running in a task
    81  type ExecOpts struct {
    82  	Spec *types.Any
    83  	IO   IO
    84  }
    85  
    86  // ConsoleSize of a pty or windows terminal
    87  type ConsoleSize struct {
    88  	Width  uint32
    89  	Height uint32
    90  }
    91  
    92  // Status is the runtime status of a task and/or process
    93  type Status int
    94  
    95  const (
    96  	// CreatedStatus when a process has been created
    97  	CreatedStatus Status = iota + 1
    98  	// RunningStatus when a process is running
    99  	RunningStatus
   100  	// StoppedStatus when a process has stopped
   101  	StoppedStatus
   102  	// DeletedStatus when a process has been deleted
   103  	DeletedStatus
   104  	// PausedStatus when a process is paused
   105  	PausedStatus
   106  	// PausingStatus when a process is currently pausing
   107  	PausingStatus
   108  )
   109  
   110  // State information for a process
   111  type State struct {
   112  	// Status is the current status of the container
   113  	Status Status
   114  	// Pid is the main process id for the container
   115  	Pid uint32
   116  	// ExitStatus of the process
   117  	// Only valid if the Status is Stopped
   118  	ExitStatus uint32
   119  	// ExitedAt is the time at which the process exited
   120  	// Only valid if the Status is Stopped
   121  	ExitedAt time.Time
   122  	Stdin    string
   123  	Stdout   string
   124  	Stderr   string
   125  	Terminal bool
   126  }
   127  
   128  // ProcessInfo holds platform specific process information
   129  type ProcessInfo struct {
   130  	// Pid is the process ID
   131  	Pid uint32
   132  	// Info includes additional process information
   133  	// Info varies by platform
   134  	Info interface{}
   135  }