防止Ctrl C 中斷Golang 中的exec.Command
使用exec.Command 啟動進程時可能會遇到Ctrl C 的中斷,即使透過signal.Notify 攔截中斷呼叫。出現此問題的原因是 shell 在收到 Ctrl C 後向整個進程組發送訊號。因此,使用 exec.Command 啟動的子進程也會受到影響。
緩解此問題並防止 Ctrl C 中斷對於子進程,在開始執行之前需要先與自己的進程組建立命令。這可以透過使用 syscall.SysProcAttr 結構的 SysProcAttr、Setpgid 和 Pgid 欄位來實現。
這是一個結合了此方法的修改範例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
|
透過此修改,當程式執行時按Ctrl C,輸出如下產生:
1 2 |
|
sleep指令繼續成功運行,示範了透過Ctrl C防止中斷。
以上是如何防止 Ctrl C 中斷 Go 中的 exec.Command?的詳細內容。更多資訊請關注PHP中文網其他相關文章!