Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah Saya Boleh Menentukan ID Proses Asal bagi Isyarat dalam Go?
Menentukan Asal Isyarat dalam Go: Meneroka Alternatif
Dalam Go, menangkap isyarat adalah mungkin, tetapi mendapatkan PID proses yang mencetuskan isyarat tidak disokong secara asli. C menyediakan pengendali isyarat yang melepasi struktur yang menunjukkan PID asal, tetapi Go kekurangan ciri ini.
Percubaan untuk mewujudkan pengendali isyarat tersuai dalam C boleh menjadi rumit dan mudah ralat. Pertimbangkan kaedah komunikasi alternatif untuk komunikasi antara proses.
Pendekatan Ganti:
Jika menentukan PID asal adalah penting, pertimbangkan pendekatan berikut:
Contoh (menggunakan Soket):
Berikut ialah contoh menggunakan soket TCP untuk menyampaikan ID proses antara proses:
import ( "net" "os" "strconv" ) func main() { // Create a TCP listener ln, err := net.Listen("tcp", ":8080") if err != nil { os.Exit(1) } // Acceptor routine go func() { for { conn, err := ln.Accept() if err != nil { continue } // Receive PID from the client buf := make([]byte, 1024) n, err := conn.Read(buf) if err != nil || n == 0 { continue } pid, err := strconv.Atoi(string(buf[:n])) if err != nil { continue } // ... Do something with the received PID } }() // Query and send PID to the server conn, err := net.Dial("tcp", "localhost:8080") if err != nil { os.Exit(1) } // Send PID to the server pid := os.Getpid() conn.Write([]byte(strconv.Itoa(pid))) }
Pendekatan ini membolehkan proses bertukar maklumat PID dengan berkesan dan lancar.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menentukan ID Proses Asal bagi Isyarat dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!