Go에서 프로세스를 중단하지 않고 고루틴 스택 덤프
실행 중인 Go 프로세스가 주어지면 코드 없이 모든 고루틴에 대한 스택 추적을 캡처할 수 있습니다. 수정 또는 프로세스 종료. 요구 사항을 충족하기 위한 솔루션은 다음과 같습니다.
구현:
신호 처리기:
신호 알림:
스택 추적 덤핑:
예제 코드:
<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를 Go 프로세스에 보내 스택 추적 덤프를 트리거할 수 있습니다. 이렇게 하려면 kill -6
위 내용은 Go 프로세스를 중단하지 않고 고루틴 스택을 덤프하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!