首頁 > 後端開發 > Golang > 如何可靠地終止 Go 程式中的子可執行檔?

如何可靠地終止 Go 程式中的子可執行檔?

Susan Sarandon
發布: 2024-11-30 20:27:17
原創
868 人瀏覽過

How Can I Reliably Terminate Child Executables from a Go Program?

確保Go 中子可執行檔的終止

在Go 中,您可能會遇到程式同時執行多個執行緒的情況,每個執行緒都呼叫單獨的可執行檔。在這種情況下,如果 Go 主程序終止,找到一種方法來停止正在運行的可執行檔就至關重要。本文探討如何在 Go 中實現這一點。

確保子可執行檔案終止的傳統方法是將它們分配到與 Go 主進程相同的進程組,然後整體殺死該進程組。或者,您可以在 syscall.SetProcAttr 中指定 Pdeathsig 欄位來控制主進程終止時傳送到子進程的訊號。

但需要注意的是,在訊號處理程序中捕獲 SIG_INT 和 SIG_TERM 等訊號在退出程式之前終止子程序並不總是可靠的,因為無法捕獲 SIG_KILL。因此,通常首選殺死進程組或設定 Pdeadsig 的方法。

為了說明這一點,請考慮以下程式碼片段:

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

cmd.SysProcAttr = &syscall.SysProcAttr{
    Pdeathsig: syscall.SIGTERM,
}
登入後複製

在此範例中,我們將子可執行檔指派給透過設定SysProcAttr與Go主行程相同的行程組。當 Go 進程終止時,指定的訊號(在本例中為 SIGTERM)將被傳送到子可執行文件,導致其終止。

以上是如何可靠地終止 Go 程式中的子可執行檔?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板