Go でプロセスを停止せずに Goroutine スタックをダンプ
実行中の Go プロセスがある場合、そのすべての goroutine のスタック トレースをコードなしでキャプチャできます。変更またはプロセスの終了。要件を満たすソリューションは次のとおりです。
実装:
シグナル ハンドラー:
シグナル通知:
スタック トレース ダンピング:
コード例:
<code class="go">import ( "fmt" "os" "os/signal" "runtime" "syscall" ) func main() { // Create a channel to receive signals sigChan := make(chan os.Signal) // Start a goroutine to listen for signals and dump stack traces go func() { stacktrace := make([]byte, 8192) for _ = range sigChan { length := runtime.Stack(stacktrace, true) fmt.Println(string(stacktrace[:length])) } }() // Notify the process to listen for SIGQUIT signals and send them to sigChan signal.Notify(sigChan, syscall.SIGQUIT) // Do some other work here... }</code>
を実行するこのコードでは、Go プロセスを強制終了せずに SIGQUIT を送信することで、スタック トレース ダンプをトリガーできます。これを行うには、kill -6
以上がGo プロセスを停止せずに Goroutine スタックをダンプするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。