비침투적으로 Go 프로세스 스택 캡처
실행을 중단하지 않고 실행 중인 Go 프로세스 내의 모든 고루틴에서 스택 추적을 캡처하려면 다음을 따르세요. 단계:
신호 처리기 설정:
<code class="go">import ( "os" "os/signal" "runtime" "syscall" ) func main() { sigChan := make(chan os.Signal) go func() { stacktrace := make([]byte, 8192) for _ = range sigChan { length := runtime.Stack(stacktrace, true) fmt.Println(string(stacktrace[:length])) } }() signal.Notify(sigChan, syscall.SIGQUIT) }</code>
SIGQUIT 신호 수신:
고루틴 내의 핸들러 함수는 SIGQUIT 신호를 캡처합니다.
스택 추적 생성:
런타임.Stack 함수는 각 고루틴에 대한 스택 추적을 생성하는 데 사용됩니다.
메모리 제약 조건 처리:
스택 추적 버퍼에는 크기 제한이 있습니다. 버퍼를 초과하면 추적이 잘립니다.
스택 추적 인쇄:
생성된 스택 추적이 표준 출력으로 인쇄됩니다. .
이 신호 처리기를 설정하면 소스 코드를 수정하거나 실행을 종료하지 않고도 실행 중인 Go 프로세스 내의 모든 고루틴에 대한 스택 추적을 효과적으로 캡처하고 표시할 수 있습니다.
위 내용은 중단 없이 Go 프로세스에서 스택 추적을 캡처하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!