github.com/hinshun/containerd@v0.2.7/api/grpc/server/server_solaris.go (about) 1 package server 2 3 import ( 4 "fmt" 5 6 "github.com/docker/containerd/api/grpc/types" 7 "github.com/docker/containerd/specs" 8 "github.com/docker/containerd/supervisor" 9 "golang.org/x/net/context" 10 ) 11 12 var clockTicksPerSecond uint64 13 14 func (s *apiServer) AddProcess(ctx context.Context, r *types.AddProcessRequest) (*types.AddProcessResponse, error) { 15 process := &specs.ProcessSpec{ 16 Terminal: r.Terminal, 17 Args: r.Args, 18 Env: r.Env, 19 Cwd: r.Cwd, 20 } 21 if r.Id == "" { 22 return nil, fmt.Errorf("container id cannot be empty") 23 } 24 if r.Pid == "" { 25 return nil, fmt.Errorf("process id cannot be empty") 26 } 27 e := &supervisor.AddProcessTask{} 28 e.ID = r.Id 29 e.PID = r.Pid 30 e.ProcessSpec = process 31 e.Stdin = r.Stdin 32 e.Stdout = r.Stdout 33 e.Stderr = r.Stderr 34 e.StartResponse = make(chan supervisor.StartResponse, 1) 35 s.sv.SendTask(e) 36 if err := <-e.ErrorCh(); err != nil { 37 return nil, err 38 } 39 <-e.StartResponse 40 return &types.AddProcessResponse{}, nil 41 }