golang 子进程

package main

import (
"log"
"os"
"bufio"
"github.com/docker/docker/pkg/reexec"
   "os/exec"
   "sync"
)

func init() {
   log.Printf("init start, os.Args = %+v\n", os.Args)
   reexec.Register("childProcess", childProcess)
   if reexec.Init() {
      reader := bufio.NewReader(os.Stdin)
      reader.ReadString('\n')
      os.Exit(0)
   }
}

func childProcess() {
   log.Println("childProcess")
}

func main() {
   log.Printf("main start, os.Args = %+v\n", os.Args)
    cmd :=make([]*exec.Cmd,5)

   var wg sync.WaitGroup
   wg.Add(5)
   for i:=0;i<5;i++{
       go func(i int,cmd []*exec.Cmd){
          cmd[i] = reexec.Command("childProcess")
          cmd[i] .Stdin = os.Stdin
          cmd[i] .Stdout = os.Stdout
          cmd[i] .Stderr = os.Stderr
          if err := cmd[i] .Start(); err != nil {
             log.Panicf("failed to run command: %s", err)
          }
          log.Println("started,begin to wait...",i)
          wg.Done()
       }(i,cmd)
    }

   wg.Wait()

    for j:=0;j<5;j++{
       if err := cmd[j] .Wait(); err != nil {
          log.Panicf("failed to wait command[%d]: %s", j,err)
       }
    }

   log.Println("main exit")
   reader := bufio.NewReader(os.Stdin)
   reader.ReadString('\n')
}

猜你喜欢

转载自blog.csdn.net/templarzq/article/details/84826440
今日推荐