Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Melaksanakan Proses Lama di Golang dan Mengelakkannya Daripada Menjadi Zombi?

Bagaimana untuk Melaksanakan Proses Lama di Golang dan Mengelakkannya Daripada Menjadi Zombi?

Patricia Arquette
Patricia Arquetteasal
2024-10-27 21:16:01386semak imbas

How to Execute Long-Running Processes in Golang and Prevent Them From Becoming Zombies?

Jalankan Perintah di Golang dan Tanggalkannya daripada Proses

Masalah ini timbul apabila anda perlu melaksanakan proses yang berjalan lama di Golang, dengan keperluan khusus seperti:

  • Mengubah hala stdout proses ke fail
  • Mengawal pengguna proses
  • Memastikan proses terus berjalan walaupun selepas program induk keluar
  • Menghalang proses daripada menjadi zombi apabila ia ranap
  • Mendapatkan PID proses yang sedang berjalan

Penyelesaian percubaan anda menggunakan Cmd.Start() dan Cmd.Wait() memenuhi kebanyakan keperluan ini kecuali untuk menghalang proses asas daripada ranap apabila anda menghantar SIGTERM/SIGKILL ke program anda.

Penyelesaian

Daripada cuba mencipta semula roda, pertimbangkan untuk menggunakan salah satu daripada perpustakaan berikut:

  • https://github.com/krallin/tini
  • https://busybox.net/
  • https: //software.clapper.org/daemonize/
  • https://wiki.gentoo.org/wiki/OpenRC
  • https://www.freedesktop.org/wiki/Software/systemd /

Perpustakaan Go-reap

Penyelesaian yang disyorkan ialah menggunakan perpustakaan https://github.com/hashicorp/go-reap.

Nota

  • Anggapan anda tentang mengasingkan proses daripada induknya adalah tidak betul. Di Linux, setiap proses mempunyai proses induk dan anda tidak boleh mengubahnya selepas penciptaan.
  • Pernyataan "Saya mahu menjalankannya sebagai daemon" tidak jelas. Proses Daemon dalam Linux mempunyai PID induk dan mematuhi peraturan ibu bapa kepada anak.
  • Isu dengan proses asas ranap apabila SIGTERM/SIGKILL dihantar ke program anda tidak boleh dihasilkan semula dengan perpustakaan go-reap .

Penafian

Penyelesaian yang disediakan memfokuskan pada menangani isu menghalang sub-proses daripada menjadi zombi. Untuk penyelesaian lengkap yang memenuhi semua keperluan, gabungan pendekatan mungkin diperlukan.

Atas ialah kandungan terperinci Bagaimana untuk Melaksanakan Proses Lama di Golang dan Mengelakkannya Daripada Menjadi Zombi?. 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