亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

為什么 exec.Start() 創建的進程在其父進程被 SIGINT 殺死時退出?

為什么 exec.Start() 創建的進程在其父進程被 SIGINT 殺死時退出?

Go
慕哥9229398 2021-06-30 10:43:56
我在golang中發現了一個奇怪的問題。exec.Start()如果父程序被os.Interrupt信號中斷,則執行的程序會退出,而如果父程序正常退出,則子程序不會退出。這兩種情況有什么區別?舉些例子:package mainimport "fmt"import "os"import "time"import "os/exec"func main(){    cmd := exec.Command("sleep", "100000")    cmd.Env = os.Environ()    fmt.Println(cmd.Env)    cmd.Start()    time.Sleep(1e9*20)    return} 在后一種情況下,如果我們不中斷主程序,sleep 100000則的父級將是init process20 秒之后。
查看完整描述

2 回答

?
HUWWW

TA貢獻1874條經驗 獲得超12個贊

發生的情況是,如果您發送進程 SIGINT(例如 os.Interrupt 所做的),同一進程組中的所有進程也將獲得該信號(包括子進程)- SIGINT 默認會終止進程。

然而,如果父進程正常退出,不是因為 SIGINT 或類似的原因,同一進程組中的進程不會得到任何信號 - 它會繼續運行,但會被 init 進程采用。這不是 Go 特有的。


查看完整回答
反對 回復 2021-07-05
  • 2 回答
  • 0 關注
  • 322 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號