Mengendalikan Gangguan Ctrl C dalam exec.Command
Apabila melaksanakan proses luaran menggunakan exec.Command, adalah penting untuk mempertimbangkan cara gangguan, seperti Ctrl C, dikendalikan. Secara lalai, menekan Ctrl C mengganggu keseluruhan kumpulan proses, termasuk proses anak. Tingkah laku ini boleh menjadi masalah jika anda ingin mengelakkan gangguan proses tertentu.
Untuk menyelesaikan isu ini dan menghalang Ctrl C daripada mengganggu proses kanak-kanak, ikut langkah berikut:
Tetapkan Kumpulan Proses: Sebelum melaksanakan proses anak, gunakan medan SysProcAttr untuk mengkonfigurasi proses kumpulan.
cmd := exec.Command("sleep", "60") cmd.SysProcAttr = &syscall.SysProcAttr{ Setpgid: true, }
Pengendalian Isyarat: Dalam proses induk, kendalikan isyarat Ctrl C untuk menghalangnya daripada merebak ke kumpulan proses.
interrupt := make(chan os.Signal, 1) signal.Notify(interrupt, os.Interrupt) go func() { <-interrupt log.Println("Ctrl+C received") // Perform any necessary cleanup or handling for Ctrl+C }() cmd.Run()
Dengan memisahkan kumpulan proses proses anak dan mengendalikan isyarat gangguan, anda boleh menghalang Ctrl C daripada mengganggu pelaksanaan proses anak sambil membenarkan proses induk mengendalikan gangguan seperti yang dikehendaki.
Atas ialah kandungan terperinci Bagaimana untuk Menghalang Ctrl C daripada Mengganggu Proses Anak exec.Command?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!