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 }