7 "github.com/containerd/containerd/runtime"
8 "github.com/containerd/containerd/specs"
9 "golang.org/x/net/context"
12 // AddProcessTask holds everything necessary to add a process to a
14 type AddProcessTask struct {
21 ProcessSpec *specs.ProcessSpec
22 StartResponse chan StartResponse
26 func (s *Supervisor) addProcess(t *AddProcessTask) error {
28 ci, ok := s.containers[t.ID]
30 return ErrContainerNotFound
32 process, err := ci.container.Exec(t.Ctx, t.PID, *t.ProcessSpec, runtime.NewStdio(t.Stdin, t.Stdout, t.Stderr))
36 s.newExecSyncChannel(t.ID, t.PID)
37 if err := s.monitorProcess(process); err != nil {
38 s.deleteExecSyncChannel(t.ID, t.PID)
40 process.Signal(os.Kill)
41 ci.container.RemoveProcess(t.PID)
44 ExecProcessTimer.UpdateSince(start)
45 t.StartResponse <- StartResponse{ExecPid: process.SystemPid()}
46 s.notifySubscribers(Event{
47 Timestamp: time.Now(),
48 Type: StateStartProcess,