Memastikan Penamatan Anak Boleh Laksana dalam Go
Dalam Go, anda mungkin menemui situasi di mana program anda menjalankan berbilang urutan serentak, setiap satu menggunakan boleh laku yang berasingan. Dalam kes sedemikian, jika proses Go utama ditamatkan, adalah penting untuk mencari jalan untuk menghentikan laksana yang sedang berjalan. Artikel ini meneroka cara untuk mencapai perkara ini dalam Go.
Cara konvensional untuk memastikan penamatan anak boleh laku adalah dengan menetapkannya kepada kumpulan proses yang sama seperti proses Go utama dan kemudian mematikan kumpulan proses secara keseluruhan. Sebagai alternatif, anda boleh menentukan medan Pdeathsig dalam syscall.SetProcAttr untuk mengawal isyarat yang dihantar kepada proses anak apabila proses utama ditamatkan.
Walau bagaimanapun, adalah penting untuk ambil perhatian bahawa menangkap isyarat seperti SIG_INT dan SIG_TERM dalam pengendali isyarat dan membunuh proses kanak-kanak sebelum keluar dari program tidak selalu boleh dipercayai, kerana SIG_KILL tidak boleh ditangkap. Oleh itu, pendekatan membunuh kumpulan proses atau menetapkan Pdeadsig secara amnya lebih diutamakan.
Untuk menggambarkan, pertimbangkan coretan kod berikut:
cmd := exec.Command("./long-process") cmd.SysProcAttr = &syscall.SysProcAttr{ Pdeathsig: syscall.SIGTERM, }
Dalam contoh ini, kami menetapkan anak boleh laku kepada kumpulan proses yang sama seperti proses Go utama dengan menetapkan SysProcAttr. Apabila proses Go ditamatkan, isyarat yang ditentukan (SIGTERM dalam kes ini) akan dihantar kepada anak boleh laku, menyebabkannya ditamatkan.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menamatkan Boleh Laksana Kanak-kanak dengan Amanah daripada Program Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!