確保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中文網其他相關文章!