Vider les piles de Goroutines sans arrêter le processus dans Go
Étant donné un processus Go en cours d'exécution, la capture des traces de pile pour toutes ses goroutines peut être réalisée sans code modifications ou interruption du processus. Voici une solution pour répondre aux exigences :
Mise en œuvre :
Gestionnaire de signaux :
Notification de signal :
Stack Trace Dumping :
Exemple de code :
<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>
En exécutant ce code, vous pouvez déclencher le dumping de la trace de pile en envoyant SIGQUIT au processus Go sans le tuer. Pour ce faire, utilisez kill -6
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!