goタスクスケジューリング1(goのオペレーティングシステムコマンド呼び出し)


package main

import (
    "fmt"
    "os/exec"
)

func main() {
    var (
        cmd *exec.Cmd
        err error
    )

    cmd = exec.Command("/bin/bash", "-c", "echo 1")
    err = cmd.Run()
    fmt.Println(err)
}
package main

import (
    "fmt"
    "os/exec"
)

func main() {
    var (
        cmd *exec.Cmd
        output []byte
        err error
    )

    //   Cmd
    cmd = exec.Command("/bin/bash", "-c", "ls -la /")

    //      ,          ( pipe )
    if output, err = cmd.CombinedOutput(); err != nil {
        fmt.Println(err)
        return
    }

    //        
    fmt.Println(string(output))

}

goroutineはlinuxコマンドを実行し、2秒寝ました.mainは1秒でbashを殺し、出力はsignal:killed:
package main

import (
    "context"
    "fmt"
    "os/exec"
    "time"
)

type result struct {
    err error
    output []byte
}

func main() {
    //    cmd,          ,    2 

    //1    ,    cmd
    var (
        ctx context.Context
        cancelFunc context.CancelFunc
        cmd *exec.Cmd
        resultChan chan *result
        res *result
    )

    //        
    resultChan = make(chan *result, 1000)

    //context   channel,    cancelFunc   channel

    //context.      context.TODO()   
    ctx,cancelFunc = context.WithCancel(context.TODO())

    go func() {
        var (
            output []byte
            err error
        )
        //exec.Command()        
        cmd = exec.CommandContext(ctx,"/bin/bash", "-c", "sleep 2;echo hello;") //    select{case