Melambak Tindanan Goroutine Tanpa Proses Menghentikan dalam Go
Memandangkan proses Go yang sedang berjalan, menangkap surih tindanan untuk semua goroutinnya boleh dicapai tanpa kod pengubahsuaian atau penamatan proses. Berikut ialah penyelesaian untuk memenuhi keperluan:
Pelaksanaan:
Pengendali Isyarat:
Pemberitahuan Isyarat:
Lambakan Surih Tindanan:
Kod Contoh:
<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>
Dengan menjalankan kod ini, anda boleh mencetuskan lambakan surih tindanan dengan menghantar SIGQUIT ke proses Go tanpa membunuhnya. Untuk berbuat demikian, gunakan kill -6
Atas ialah kandungan terperinci Bagaimana untuk Membuang Tindanan Goroutine Tanpa Menghentikan Proses Pergi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!