给出以下代码:


package main

import (

    "os"

    "fmt"

    "os/exec"

    "os/signal"

    "syscall"

)


const NUMBER_OF_PEASANTS = 3


func createPeasants() map[string]*exec.Cmd {

    peasants := map[string]*exec.Cmd{}

    for i := 0; i < NUMBER_OF_PEASANTS; i++ {

        name := fmt.Sprintf("peasant#%d", i + 1)

        fmt.Printf("[master] Start %s...\n", name)

        cmd := exec.Command(os.Args[0], name)

        cmd.Stderr = os.Stderr

        cmd.Stdin = os.Stdin

        cmd.Stdout = os.Stdout

        if err := cmd.Start(); err != nil {

            panic(err)

        }

        peasants[name] = cmd

    }

    return peasants

}


func masterWaitForSignal(c chan os.Signal) {

    for true {

        s := <-c

        fmt.Printf("[master] Got signal %v but still running...\n", s)

    }

}


func peasantWaitForSignal(name string, c chan os.Signal) {

    s := <-c

    fmt.Printf("[%s] Got signal %v and will exit not with code 66\n", name, s)

    os.Exit(66)

}


func waitForPeasants(peasants map[string]*exec.Cmd) {

    for name, peasant := range peasants {

        if err := peasant.Wait(); err != nil {

            if exitError, ok := err.(*exec.ExitError); ok {

                waitStatus := exitError.Sys().(syscall.WaitStatus)

                fmt.Printf("[master] %s ended with exit code %d.\n", name, waitStatus.ExitStatus())

            } else {

                panic(err)

            }

        }

    }

}


func actAsMaster() {

    c := make(chan os.Signal, 1)

    signal.Notify(c, os.Interrupt)


    peasants := createPeasants()


    fmt.Printf("[master] Started.\n")

    go masterWaitForSignal(c)

    waitForPeasants(peasants)

    fmt.Printf("[master] Done.\n")

}


func actAsPeasant(name string) {

    c := make(chan os.Signal, 1)

    signal.Notify(c, os.Interrupt)


    fmt.Printf("[%s] Started.\n", name)

    peasantWaitForSignal(name, c)

    fmt.Printf("[%s] Done.\n", name)

}


func main() {

    if len(os.Args) > 1 {

        actAsPeasant(os.Args[1])

    } else {

        actAsMaster()

    }

}


如何防止孩子收到中断信号?但我不想改写孩子。需要改变调用过程。