ホームページ > バックエンド開発 > Golang > Ctrl C による exec.Command 子プロセスの中断を防ぐ方法

Ctrl C による exec.Command 子プロセスの中断を防ぐ方法

Mary-Kate Olsen
リリース: 2024-12-15 02:36:10
オリジナル
996 人が閲覧しました

How to Prevent Ctrl C from Interrupting exec.Command Child Processes?

exec.Command での Ctrl C 割り込みの処理

exec.Command を使用して外部プロセスを実行する場合、次のような割り込みがどのように発生するかを考慮することが重要です。 Ctrl C が処理されます。デフォルトでは、Ctrl C を押すと、子プロセスを含むプロセス グループ全体が中断されます。特定のプロセスの中断を防ぎたい場合、この動作は問題となる可能性があります。

この問題を解決し、Ctrl C による子プロセスの中断を防ぐには、次の手順に従います。

  1. Set Process Group: 子プロセスを実行する前に、SysProcAttr フィールドを使用してプロセスを構成しますgroup.

    cmd := exec.Command("sleep", "60")
    cmd.SysProcAttr = &syscall.SysProcAttr{
        Setpgid: true,
    }
    ログイン後にコピー
  2. シグナル処理: 親プロセスで、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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート