Determining Signal Origin in Go: Exploring Alternatives
Go에서는 신호 캡처가 가능하지만 신호를 트리거한 프로세스의 PID를 가져옵니다. 신호는 기본적으로 지원되지 않습니다. C는 원래 PID를 나타내는 구조를 전달하는 신호 처리기를 제공하지만 Go에는 이 기능이 없습니다.
C에서 사용자 정의 신호 처리기를 설정하려는 시도는 복잡하고 오류가 발생하기 쉽습니다. 프로세스 간 통신을 위한 대체 통신 방법을 고려하십시오.
대체 접근 방식:
원래 PID를 결정하는 것이 중요한 경우 다음 접근 방식을 고려하십시오.
예(사용 소켓):
다음은 TCP 소켓을 사용하여 프로세스 간에 프로세스 ID를 통신하는 예입니다.
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))) }
이 접근 방식을 사용하면 프로세스가 PID 정보를 효과적이고 원활하게 교환할 수 있습니다.
위 내용은 Go에서 신호의 원래 프로세스 ID를 어떻게 확인할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!