在exec.Command 中處理Ctrl C 中斷
使用exec.Command 執行外部進程時,考慮中斷的方式至關重要,例如Ctrl C,已處理。預設情況下,按 Ctrl C 會中斷整個進程組,包括子程序。如果您想防止特定進程中斷,此行為可能會出現問題。
要解決此問題並防止 Ctrl C 中斷子進程,請按照以下步驟操作:
設定進程組:執行子程序之前,使用SysProcAttr欄位設定程序
cmd := exec.Command("sleep", "60") cmd.SysProcAttr = &syscall.SysProcAttr{ Setpgid: true, }
訊號處理:在父程式中,處理Ctrl C 訊號以防止其傳播到進程組。
interrupt := make(chan os.Signal, 1) signal.Notify(interrupt, os.Interrupt) go func() { <-interrupt log.Println("Ctrl+C received") // Perform any necessary cleanup or handling for Ctrl+C }() cmd.Run()
透過分離子程序的程序組並處理中斷訊號,可以防止 Ctrl C 中斷子程序的執行,同時允許父程序根據需要處理中斷。
以上是如何防止 Ctrl C 中斷 exec.Command 子進程?的詳細內容。更多資訊請關注PHP中文網其他相關文章!