Saya perlu melaksanakan proses yang berjalan lama dalam Go, memenuhi keperluan berikut:
Saya sedang menjalankan program saya dengan kebenaran root dan mempunyai mencuba penyelesaian menggunakan exec.Command() dan syscall.SysProcAttr, tetapi ia gagal apabila saya menghantar SIGTERM/SIGKILL ke program saya, menyebabkan proses asas ranap. Saya mahu menjalankan proses sebagai daemon, berasingan daripada kawalan program saya.
Menggunakan perpustakaan luaran, seperti github.com/hashicorp/go-reap, adalah sangat disyorkan sebagai ia berkesan menyelesaikan isu tersebut. Walau bagaimanapun, jika anda lebih suka pelaksanaan tersuai, pendekatan berikut boleh dipertimbangkan:
Adalah penting untuk mengakui bahawa mustahil untuk memisahkan sepenuhnya proses ibu bapa dan anak dari segi proses pewarisan. Semua proses mesti mempunyai ibu bapa, dan jika ibu bapa meninggal dunia, anak itu akan menjadi yatim piatu dan diterima pakai oleh PID 1 (init). Dalam erti kata lain, kanak-kanak tidak boleh mempunyai ibu bapa yang berbeza daripada proses awal yang memulakannya.
Untuk memastikan proses terus berjalan selepas ibu bapa keluar, pertimbangkan untuk menggunakan pengurus proses khusus seperti systemd atau docker, yang boleh mengurus proses yatim dan memastikan pelaksanaannya berterusan. Penyelesaian berpotensi lain termasuk menulis daemon tersuai atau menggunakan perpustakaan seperti go-daemon untuk mengurus kitaran hayat proses secara bebas daripada program induk.
Atas ialah kandungan terperinci Bagaimana untuk Menjalankan Proses Jangka Panjang dalam Go dan Menyingkirkannya daripada Proses Induk?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!