github.com/zhuohuang-hust/src-cbuild@v0.0.0-20230105071821-c7aab3e7c840/mergeCode/containerd/supervisor/add_process.go (about)

     1  package supervisor
     2  
     3  import (
     4  	"time"
     5  
     6      "log"
     7      "os"
     8  
     9  	"github.com/docker/containerd/runtime"
    10  	"github.com/docker/containerd/specs"
    11  	"golang.org/x/net/context"
    12  )
    13  
    14  // AddProcessTask holds everything necessary to add a process to a
    15  // container
    16  type AddProcessTask struct {
    17  	baseTask
    18  	ID            string
    19  	PID           string
    20  	Stdout        string
    21  	Stderr        string
    22  	Stdin         string
    23  	ProcessSpec   *specs.ProcessSpec
    24  	StartResponse chan StartResponse
    25  	Ctx           context.Context
    26  }
    27  
    28  func (s *Supervisor) addProcess(t *AddProcessTask) error {
    29  	start := time.Now()
    30  	ci, ok := s.containers[t.ID]
    31  	if !ok {
    32          logPrintAddPro("ErrContainerNotFound")
    33  		return ErrContainerNotFound
    34  	}
    35  	process, err := ci.container.Exec(t.Ctx, t.PID, *t.ProcessSpec, runtime.NewStdio(t.Stdin, t.Stdout, t.Stderr))
    36  	if err != nil {
    37  		return err
    38  	}
    39  	if err := s.monitorProcess(process); err != nil {
    40  		return err
    41  	}
    42  	ExecProcessTimer.UpdateSince(start)
    43  	s.newExecSyncChannel(t.ID, t.PID)
    44  	t.StartResponse <- StartResponse{ExecPid: process.SystemPid()}
    45  	s.notifySubscribers(Event{
    46  		Timestamp: time.Now(),
    47  		Type:      StateStartProcess,
    48  		PID:       t.PID,
    49  		ID:        t.ID,
    50  	})
    51  	return nil
    52  }
    53  
    54  
    55  func logPrintAddPro(errStr string) {
    56      logFile, logError := os.Open("/home/vagrant/addlogServer.md")
    57      if logError != nil {
    58          logFile, _ = os.Create("/home/vagrant/addlogServer.md")
    59      }
    60      defer logFile.Close()
    61  
    62      debugLog := log.New(logFile, "[Debug]", log.Llongfile)
    63      debugLog.Println(errStr)
    64  }