Rumah > pembangunan bahagian belakang > Golang > Bagaimanakah Saya Boleh Menentukan ID Proses Asal bagi Isyarat dalam Go?

Bagaimanakah Saya Boleh Menentukan ID Proses Asal bagi Isyarat dalam Go?

Patricia Arquette
Lepaskan: 2024-12-06 22:25:16
asal
201 orang telah melayarinya

How Can I Determine the Originating Process ID of a Signal in 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:

  • Memori Dikongsi: Cipta segmen memori kongsi yang membolehkan proses berkomunikasi dan bertukar maklumat.
  • Baris Gilir Mesej: Gunakan baris gilir mesej untuk menghantar dan menerima mesej antara proses, memastikan komunikasi yang boleh dipercayai.
  • Komunikasi Soket: Wujudkan sambungan soket antara proses untuk komunikasi cekap dan dua hala.

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)))
}
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan