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

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

DDD
DDD원래의
2024-11-27 02:09:10336검색

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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