Golang のプロセスを終了する方法: 最初に [chan struct{}] を定義し、次に [close()] 関数を呼び出してチャネルを閉じ、終了シグナルを各ゴルーチンに渡します。最後に [< を取得します。 -chan ]、ブレーク ループを終了するだけです。
Golang のプロセスを終了する方法:
次は main 関数が func を終了するための解決策です。運用環境 ここで、exit func は多くの終了操作を実行する可能性があり、終了オブジェクトは無限ループが埋め込まれた多くの goroutine である可能性があります。各 goroutine に終了信号を渡すにはどうすればよいですか?
私の通常のアプローチは、chan struct{}
を定義することです。チャンネルを閉じるために close()
関数が呼び出されるとき、すべての <- chan
これらの操作は同時に実行されるため、終了シグナルが各 goroutine に渡され、各 goroutine が select を通じてポーリングできるようになります (デフォルトでは、Linux の select はポーリングのために epoll を呼び出します)。 <-chan、ブレークループ
package main import( "fmt" "os" "os/signal" "syscall" ) func main(){ signalChan := make(chan os.Signal,1) //创建一个信号量的chan,缓存为1,(0,1)意义不大 signal.Notify(signalChan, syscall.SIGINT, syscall.SIGTERM)//让进城收集信号量。 fmt.Println("i am workding!") <-signalChan ExitFunc() } func ExitFunc(){ fmt.Println("i am exiting!") }
関連学習の推奨事項:
以上がgolangでプロセスを終了するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。