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  }