Go Parent 프로세스가 종료될 때 하위 프로세스를 안정적으로 종료하는 방법은 무엇입니까?

DDD
풀어 주다: 2024-11-27 02:09:10
원래의
225명이 탐색했습니다.

How to Reliably Kill Child Processes When a Go Parent Process Exits?

Go 프로세스에서 하위 실행 파일 종료

Go에서 별도의 실행 파일을 실행하는 여러 스레드를 실행하는 경우, 실행 시 이러한 하위 프로세스가 종료되도록 합니다. 상위 Go 프로세스를 종료하는 것이 중요해집니다. 이 문서에서는 이 목표를 달성하기 위해 사용 가능한 방법을 탐색하여 이 문제를 다룹니다.

방법 1: 프로세스 그룹

한 가지 접근 방식은 동일한 프로세스에서 하위 프로세스를 시작하는 것입니다. 상위 Go 프로세스로 그룹화합니다. 이렇게 하면 상위 프로세스가 종료 신호(예: SIGKILL 또는 SIGINT)를 수신하면 하위 실행 파일을 포함한 전체 프로세스 그룹이 종료됩니다.

방법 2: Pdeathsig 속성

syscall.SetProcAttr 함수 내의 Pdeathsig 속성을 사용하면 신호를 지정할 수 있습니다. 상위 프로세스가 종료되면 하위 프로세스로 전송됩니다. 이 속성을 종료 신호(예: syscall.SIGTERM)로 설정하면 상위 Go 프로세스가 종료될 때 하위 프로세스에 종료하라는 신호가 전달됩니다.

신호 처리

SIG_KILL의 효율성이 보장되지는 않지만 SIG_INT 및 SIG_TERM과 같은 일반적인 신호에 대한 신호 처리기를 설정할 수 있습니다. 이 핸들러 내에서 syscall.Kill 또는 cmd.Process.Kill을 사용하여 하위 프로세스를 수동으로 종료할 수 있습니다.

예제 코드:

다음 코드 샘플은 사용 방법을 보여줍니다. 하위 프로세스 종료를 보장하기 위한 Pdeathsig:

cmd := exec.Command("./long-process")
cmd.SysProcAttr = &syscall.SysProcAttr{
    Pdeathsig: syscall.SIGTERM,
}
로그인 후 복사

위 내용은 Go Parent 프로세스가 종료될 때 하위 프로세스를 안정적으로 종료하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿