exec.Command での Ctrl C 割り込みの処理
exec.Command を使用して外部プロセスを実行する場合、次のような割り込みがどのように発生するかを考慮することが重要です。 Ctrl C が処理されます。デフォルトでは、Ctrl C を押すと、子プロセスを含むプロセス グループ全体が中断されます。特定のプロセスの中断を防ぎたい場合、この動作は問題となる可能性があります。
この問題を解決し、Ctrl C による子プロセスの中断を防ぐには、次の手順に従います。
Set Process Group: 子プロセスを実行する前に、SysProcAttr フィールドを使用してプロセスを構成しますgroup.
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 中国語 Web サイトの他の関連記事を参照してください。