>백엔드 개발 >Golang >Go에서 신호 발생기의 PID를 어떻게 확인할 수 있나요?

Go에서 신호 발생기의 PID를 어떻게 확인할 수 있나요?

Patricia Arquette
Patricia Arquette원래의
2024-12-10 00:44:10615검색

How Can I Determine the PID of a Signal's Originator in Go?

Go: 신호 원점 검색

Go에서는 신호 캡처가 가능하지만 신호를 트리거한 PID를 결정하는 것이 어려울 수 있습니다.

신호의 한계 처리

Go는 내부적으로 신호 처리기를 관리하며 신호 발생자의 PID에 액세스할 수 있는 공식적인 방법은 없습니다. 제공된 예에서 관찰된 바와 같이 반환된 신호 정보에는 이 데이터가 포함되지 않습니다.

대체 접근 방식

파이프 또는 세마포어와 같은 대체 통신 방법 사용 , 신호 출처 결정이 중요한 경우에 더 적합할 수 있습니다.

복잡한 솔루션 C

공식적으로 지원되지는 않지만 C에서 PID를 캡처할 수 있는 사용자 정의 신호 처리기를 설정하는 것이 가능합니다. 그러나 이 접근 방식은 복잡하고 잠재적인 위험을 초래합니다.

다음은 GitHub 문제 7227에서 Ian이 제안한 솔루션을 기반으로 한 예입니다.

package main

import (
    "C"
    "os"
    "syscall"
    "time"
)

func main() {
    C.test()
    pid := os.Getpid()
    for {
        syscall.Kill(pid, syscall.SIGUSR1)
        time.Sleep(time.Second)
    }
}

이 예는 C의 sigaction을 사용하여 발신자의 PID를 인쇄하는 사용자 정의 신호 처리기.

위 내용은 Go에서 신호 발생기의 PID를 어떻게 확인할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.