91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

go任務調度1(go的操作系統命令調用)

發布時間:2020-07-28 15:44:15 來源:網絡 閱讀:532 作者:梁十八 欄目:編程語言
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睡一秒就殺死了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 <- ctx.Done()},一旦檢測到調用了cancelFunc,則kill掉bash程序(kill pid,進程id,殺死子進程)

        //執行任務,捕獲輸出
        output, err = cmd.CombinedOutput()

        //把任務輸出結果傳給main協程
        resultChan <- &result{
            err: err,
            output: output,
        }
    }()

    //繼續往下走
    time.Sleep(1 * time.Second)

    //取消上下文
    cancelFunc()

    //在main協程里, 等待子協程的退出,并打印任務執行結果
    res = <- resultChan

    // 打印任務執行結果
    fmt.Println(res.err, string(res.output))

}
向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

枣阳市| 丹巴县| 罗平县| 盐边县| 曲阳县| 扎囊县| 贵南县| 巴彦淖尔市| 海城市| 讷河市| 嵊州市| 锡林浩特市| 唐河县| 大方县| 谢通门县| 信阳市| 阜新市| 沧源| 佛冈县| 宾川县| 沂南县| 沽源县| 文昌市| 于都县| 简阳市| 舒兰市| 郯城县| 连平县| 达孜县| 常德市| 安仁县| 安康市| 宁国市| 阿瓦提县| 马公市| 乌兰浩特市| 韶关市| 望谟县| 邹平县| 资溪县| 乌鲁木齐市|