>백엔드 개발 >Golang >Go에서 시작된 프로세스의 신호를 어떻게 포착하고 처리할 수 있나요?

Go에서 시작된 프로세스의 신호를 어떻게 포착하고 처리할 수 있나요?

Barbara Streisand
Barbara Streisand원래의
2024-12-29 15:21:16541검색

How Can I Catch and Handle Signals from a Launched Process in Go?

Golang에서 신호 잡기

일부 시나리오에서는 Golang에서 생성된 신호를 모니터링하고 잡는 프로세스 래퍼를 구현해야 할 수도 있습니다. 시작된 프로세스. 프로세스 래퍼는 프로세스를 시작하고 SIGKILL 및 SIGTERM과 같은 신호를 처리해야 합니다.

프로세스 시작

프로세스를 시작하려면 syscall.Exec 함수를 사용할 수 있습니다. . 이 기능을 사용하면 명령을 실행하고 해당 입력 및 출력 스트림을 리디렉션할 수 있습니다. 예는 다음과 같습니다.

func launchCmd(path string, args []string) {
  err := syscall.Exec(path, args, os.Environ())
  if err != nil {
    panic(err)
  }
}

신호 잡기

Go에서는 signal 패키지를 사용하여 프로세스로 전송된 신호를 잡을 수 있습니다. signal.Notify 함수를 사용하면 지정된 신호에 대한 알림을 받을 채널을 등록할 수 있습니다. 예:

sigc := make(chan os.Signal, 1)
signal.Notify(sigc,
    syscall.SIGHUP,
    syscall.SIGINT,
    syscall.SIGTERM,
    syscall.SIGQUIT)
go func() {
    s := <-sigc
    // ... do something ...
}()

이 코드에서 sigc는 지정된 신호 유형에서 신호를 수신하는 채널입니다. select 문을 사용하여 이 채널의 신호를 수신하고 적절한 작업을 수행할 수 있습니다.

추가 참고 사항

  • 프로세스 ID(PID)를 얻을 수 있습니다. ) Process.Pid 메서드를 사용하여 시작된 프로세스의
  • 프로세스에 신호를 보내려면 syscall.Kill을 사용할 수 있습니다. 또는 Process.Signal 함수.
  • 잡을 수 있는 신호는 호스트 시스템의 운영 체제와 프로세스의 권한에 따라 다릅니다.
  • os 및 os/exec 패키지도 메소드를 제공합니다. 프로세스 시작을 위한 것이지만 syscall 패키지와 동일한 수준의 신호 처리를 제공하지 않을 수 있습니다.

위 내용은 Go에서 시작된 프로세스의 신호를 어떻게 포착하고 처리할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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