github.com/cnboonhan/delve@v0.0.0-20230908061759-363f2388c2fb/_fixtures/spawn.go (about)

     1  package main
     2  
     3  import (
     4  	"fmt"
     5  	"os"
     6  	"os/exec"
     7  	"strconv"
     8  	"time"
     9  )
    10  
    11  func traceme1() {
    12  	fmt.Printf("parent starting\n")
    13  }
    14  
    15  func traceme2(n string) {
    16  	fmt.Printf("hello from %s\n", n)
    17  }
    18  
    19  func traceme3() {
    20  	fmt.Printf("done\n")
    21  }
    22  
    23  func main() {
    24  	exe, _ := os.Executable()
    25  	switch os.Args[1] {
    26  	case "spawn":
    27  		traceme1()
    28  		n, _ := strconv.Atoi(os.Args[2])
    29  		cmds := []*exec.Cmd{}
    30  		for i := 0; i < n; i++ {
    31  			cmd := exec.Command(exe, "child", fmt.Sprintf("C%d", i))
    32  			cmd.Stdout = os.Stdout
    33  			cmd.Start()
    34  			cmds = append(cmds, cmd)
    35  		}
    36  
    37  		for _, cmd := range cmds {
    38  			cmd.Wait()
    39  		}
    40  
    41  		time.Sleep(1 * time.Second)
    42  		traceme3()
    43  
    44  	case "child":
    45  		traceme2(os.Args[2])
    46  
    47  	}
    48  }