Membunuh Executable Child dalam Proses Go
Apabila menjalankan berbilang thread dalam Go yang melaksanakan executable berasingan, memastikan penamatan proses anak ini apabila penamatan proses Go induk menjadi penting. Artikel ini menangani isu ini dengan meneroka kaedah yang tersedia untuk mencapai matlamat ini.
Kaedah 1: Kumpulan Proses
Satu pendekatan ialah memulakan proses anak dalam proses yang sama kumpulan sebagai proses Go induk. Dengan berbuat demikian, apabila proses induk menerima isyarat bunuh (cth., SIGKILL atau SIGINT), keseluruhan kumpulan proses, termasuk anak boleh laku, ditamatkan.
Kaedah 2: Atribut Pdeathsig
Atribut Pdeathsig dalam fungsi syscall.SetProcAttr membolehkan anda tentukan isyarat yang akan dihantar kepada proses anak apabila proses induknya ditamatkan. Dengan menetapkan atribut ini kepada isyarat penamatan (cth., syscall.SIGTERM), proses anak akan diberi isyarat untuk keluar apabila proses Go induk keluar.
Pengendalian Isyarat
Walaupun tidak dijamin berkesan dengan SIG_KILL, anda boleh mewujudkan pengendali isyarat untuk isyarat biasa seperti SIG_INT dan SIG_TERM. Dalam pengendali ini, anda boleh menamatkan proses anak secara manual menggunakan syscall.Kill atau cmd.Process.Kill.
Contoh Kod:
Sampel kod berikut menunjukkan penggunaan daripada Pdeathsig untuk memastikan penamatan proses kanak-kanak:
cmd := exec.Command("./long-process") cmd.SysProcAttr = &syscall.SysProcAttr{ Pdeathsig: syscall.SIGTERM, }
Atas ialah kandungan terperinci Bagaimana untuk Membunuh Proses Kanak-kanak dengan Amanah Apabila Proses Go Parent Keluar?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!