Comment vider les piles de Goroutine sans mettre fin à un processus Go
Un processus Go nécessite la possibilité de vider les traces de pile pour chaque goroutine sans altérer son code source ou y mettre fin. Pour y parvenir, envisagez d'implémenter un gestionnaire de signal à l'aide de l'extrait de code ci-dessous :
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) ... }
Lorsqu'un signal SIGQUIT est reçu, il est transmis au canal désigné. Par la suite, la fonction runtime.Stack formate la trace de pile dans un tampon spécifié. Si la trace de pile dépasse la taille du tampon, elle est tronquée et imprimée. En conséquence, cette approche permet la capture d'une trace de pile pour chaque goroutine sans interrompre le processus Go en cours.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!