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

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

確保 Go Process 中調(diào)用的可執(zhí)行文件在 Process 被殺死時被殺死

確保 Go Process 中調(diào)用的可執(zhí)行文件在 Process 被殺死時被殺死

Go
瀟湘沐 2021-12-07 10:07:13
我在 Go (golang) 中有一些代碼,有幾個不同的線程運行一個單獨的可執(zhí)行文件。我想確保如果用戶在 Go 中殺死我的進程,我有辦法殺死我調(diào)用的可執(zhí)行文件,有沒有辦法做到這一點?
查看完整描述

3 回答

?
慕無忌1623718

TA貢獻1744條經(jīng)驗 獲得超4個贊

確保子進程被殺死的唯一方法,是在同一個進程組中啟動它,并將進程組作為一個整體殺死,或者Pdeadthsig在syscall.SetProcAddr.


您可以為SIG_INTand等常見信號設(shè)置信號處理程序SIG_TERM,并在退出之前終止您的子進程,但由于您無法捕獲SIG_KILL,因此通常不值得付出努力。


請參閱:其他 goroutine 中的恐慌沒有停止子進程


cmd := exec.Command("./long-process")


cmd.SysProcAttr = &syscall.SysProcAttr{

    Pdeathsig: syscall.SIGTERM,

}


查看完整回答
反對 回復 2021-12-07
?
汪汪一只貓

TA貢獻1898條經(jīng)驗 獲得超8個贊

一種可能的策略是將正在運行的進程列表保存在全局數(shù)組中,var childProcesses = make([]*os.Process, 0)并在每次啟動進程時附加到該列表中。


有自己的Exit功能。確保您永遠不會os.Exit在代碼中的任何地方調(diào)用,Exit而是始終調(diào)用您自己的函數(shù)。您的退出功能將殺死所有childProcesses


for _, p := range childProcesses {

    p.Kill()

}

處理信號,使它們通過您自己的退出函數(shù),例如在初始化期間執(zhí)行此操作(靠近主函數(shù)頂部的某個位置)


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

signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM, syscall.SIGKILL, syscall.SIGQUIT)

goUnsafe(func() {

    var signal = <-sigs

    log.Println("Got Signal", signal)

    Exit(0)

})


查看完整回答
反對 回復 2021-12-07
?
墨色風雨

TA貢獻1853條經(jīng)驗 獲得超6個贊

我在 Go (golang) 中有一些代碼,有幾個不同的線程運行一個單獨的可執(zhí)行文件。我想確保如果用戶在 Go 中殺死我的進程,我有辦法殺死我調(diào)用的可執(zhí)行文件,有沒有辦法做到這一點?

我不清楚您所說的“運行不同的線程”是什么意思。我會假設(shè):

  • 這些線程屬于“我調(diào)用的可執(zhí)行文件”

  • 那些線程不一定是用 golang 寫的

  • 您無法控制它們的執(zhí)行(即,您無法更改它們的代碼)

從這個意義上說,我們正在談?wù)搫?chuàng)建一個進程組并確保當您殺死一個進程時,該組中的所有其他進程也必須停止。此機制依賴于操作系統(tǒng)。

在當前版本中,有兩種可能性(參見包x/sys):


查看完整回答
反對 回復 2021-12-07
  • 3 回答
  • 0 關(guān)注
  • 227 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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