Apabila melaksanakan program atau proses luaran dalam aplikasi Go, adalah penting untuk memastikan proses ini boleh ditamatkan dengan anggun apabila proses Go induk ditamatkan, sama ada oleh pengguna atau melalui peristiwa yang tidak dijangka. Ini memastikan pengurusan sumber yang betul dan menghalang proses yatim daripada berterusan selepas aplikasi telah dikeluarkan.
Untuk mencapai ini, terdapat dua kaedah utama yang tersedia:
Satu pendekatan melibatkan memulakan proses anak dalam kumpulan proses yang sama dengan proses Go induk. Ini bermakna apabila proses induk dimatikan (mis., oleh pengguna yang menghantar isyarat SIGTERM atau SIGKILL), keseluruhan kumpulan proses, termasuk proses anak, juga akan ditamatkan.
Untuk menyediakan perkongsian kumpulan proses , gunakan medan SysProcAttr bagi struct exec.Cmd:
cmd := exec.Command("./long-process") cmd.SysProcAttr = &syscall.SysProcAttr{ Setpgid: true, }
Pendekatan kedua melibatkan penggunaan medan Pdeathsig bagi struct syscall.SysProcAttr. Ini membolehkan anda menentukan isyarat yang harus dihantar kepada proses anak apabila proses induk ditamatkan. Secara lalai, Pdeathsig ditetapkan kepada 0, bermakna tiada isyarat khusus dihantar. Walau bagaimanapun, anda boleh menetapkannya kepada nilai isyarat yang sah, seperti syscall.SIGTERM, untuk memastikan proses anak menerima isyarat sebelum ditamatkan secara tiba-tiba oleh sistem pengendalian:
cmd := exec.Command("./long-process") cmd.SysProcAttr = &syscall.SysProcAttr{ Pdeathsig: syscall.SIGTERM, }
Selain menetapkan Pdeathsig, anda juga boleh melaksanakan pengendali isyarat dalam kod Go anda untuk memintas isyarat penamatan biasa (seperti SIG_INT atau SIG_TERM) dan secara eksplisit membunuh proses anak sebelum proses induk keluar.
Perhatikan bahawa pada umumnya tidak mungkin untuk menangkap isyarat SIG_KILL, kerana ia secara eksplisit memintas pengendali isyarat biasa. Oleh itu, adalah penting untuk menggunakan kaedah yang mantap seperti yang diterangkan di atas untuk memastikan penamatan yang anggun dalam kebanyakan senario.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Memastikan Penamatan Anggun Proses Luaran Dipanggil daripada Aplikasi My Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!