Go 프로세스를 종료하지 않고 고루틴 스택을 덤프하는 방법
Go 프로세스에는 각 고루틴의 스택 추적을 변경하지 않고 덤프하는 기능이 필요합니다. 소스 코드를 삭제하거나 종료합니다. 이를 달성하려면 아래 코드 조각을 사용하여 신호 처리기를 구현하는 것을 고려하세요.
import ( "fmt" "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) ... }
SIGQUIT 신호가 수신되면 지정된 채널로 전달됩니다. 그 후, Runtime.Stack 함수는 스택 추적을 지정된 버퍼로 형식화합니다. 스택 추적이 버퍼 크기를 초과하면 잘려서 인쇄됩니다. 결과적으로 이 접근 방식을 사용하면 실행 중인 Go 프로세스를 중단하지 않고 각 고루틴에 대한 스택 추적을 캡처할 수 있습니다.
위 내용은 Go 프로세스에서 고루틴 스택을 종료하지 않고 덤프하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!