第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如果父進(jìn)程終止則 kill exec

如果父進(jìn)程終止則 kill exec

Go
喵喵時光機(jī) 2023-03-07 14:24:09
我有一段代碼如下:func Foo() {    cmd := exec.Command("command that takes a long time")    err = cmd.Start()    if err != nil {        panic(err)    }    return}func main() {    Foo()    panic("program quit abruptly")}即使主進(jìn)程結(jié)束,睡眠命令仍將處于活動狀態(tài),是否可以鏈接這些,以便cmd如果父進(jìn)程被殺死?
查看完整描述

1 回答

?
紅顏莎娜

TA貢獻(xiàn)1842條經(jīng)驗(yàn) 獲得超13個贊

如果您希望在程序退出時終止您啟動的進(jìn)程,那么您可以注入一個上下文:


func Foo(ctx context.Context) {

    cmd := exec.CommandContext(ctx, "command that takes a long time")

    _ = cmd.Start()


    return

}


func main() {

    ctx, cancel := context.WithCancel(context.Background())


    Foo(ctx)

    defer cancel()


    panic("program quit abruptly")

}

這段代碼通過創(chuàng)建一個帶有取消函數(shù)的上下文來工作。然后將此上下文發(fā)送到Foo命令函數(shù)并從那里發(fā)送到命令函數(shù)。當(dāng)cancel被調(diào)用時,上下文會被取消,導(dǎo)致子進(jìn)程被殺死。為確保取消上下文,我們將調(diào)用推遲到cancel,這可確保在程序出于任何原因(包括恐慌)退出時取消上下文。


如果你的愿望是只在恐慌時取消,你可以main稍微修改一下:


func main() {

    ctx, cancel := context.WithCancel(context.Background())


    Foo(ctx)

    defer func() {

        if r := recover(); r != nil {

            cancel()

        }

    }()


    panic("program quit abruptly")

}


查看完整回答
反對 回復(fù) 2023-03-07
  • 1 回答
  • 0 關(guān)注
  • 151 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號