Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Menghalang Ctrl C daripada Mengganggu Proses Anak exec.Command?

Bagaimana untuk Menghalang Ctrl C daripada Mengganggu Proses Anak exec.Command?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-15 02:36:10999semak imbas

How to Prevent Ctrl C from Interrupting exec.Command Child Processes?

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:

  1. 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,
    }
  2. 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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn