Go: Signal Origin Retrieval
Dalam Go, menangkap isyarat adalah mungkin, tetapi menentukan PID yang mencetuskan isyarat boleh mencabar.
Had Isyarat Pengendalian
Go mengurus pengendali isyarat secara dalaman, dan tiada cara rasmi untuk mengakses PID pemula isyarat. Maklumat isyarat yang dikembalikan, seperti yang diperhatikan dalam contoh yang diberikan, tidak termasuk data ini.
Pendekatan Alternatif
Menggunakan kaedah alternatif untuk komunikasi, seperti paip atau semaphore , mungkin lebih sesuai dalam kes di mana penentuan asal isyarat adalah penting.
Penyelesaian Kompleks daripada C
Walaupun tidak disokong secara rasmi, adalah mungkin untuk menyediakan pengendali isyarat tersuai dalam C yang boleh menangkap PID. Walau bagaimanapun, pendekatan ini rumit dan menimbulkan risiko yang berpotensi.
Berikut ialah contoh berdasarkan penyelesaian yang dicadangkan oleh Ian daripada isu GitHub 7227:
package main import ( "C" "os" "syscall" "time" ) func main() { C.test() pid := os.Getpid() for { syscall.Kill(pid, syscall.SIGUSR1) time.Sleep(time.Second) } }
Contoh ini menggunakan sigaction C untuk mewujudkan pengendali isyarat tersuai, yang mencetak PID pengirim.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menentukan PID Pemula Isyarat dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!