exec.Command에서 Ctrl C 중단 처리
exec.Command를 사용하여 외부 프로세스를 실행할 때 다음과 같은 중단 방법을 고려하는 것이 중요합니다. Ctrl C가 처리됩니다. 기본적으로 Ctrl C를 누르면 하위 프로세스를 포함한 전체 프로세스 그룹이 중단됩니다. 특정 프로세스의 중단을 방지하려는 경우 이 동작은 문제가 될 수 있습니다.
이 문제를 해결하고 Ctrl C가 하위 프로세스를 중단하지 않도록 하려면 다음 단계를 따르세요.
프로세스 그룹 설정: 하위 프로세스를 실행하기 전에 SysProcAttr 필드를 사용하여 프로세스를 구성합니다. group.
cmd := exec.Command("sleep", "60") cmd.SysProcAttr = &syscall.SysProcAttr{ Setpgid: true, }
신호 처리: 상위 프로세스에서 Ctrl C 신호를 처리하여 프로세스 그룹으로 전파되는 것을 방지합니다.
interrupt := make(chan os.Signal, 1) signal.Notify(interrupt, os.Interrupt) go func() { <-interrupt log.Println("Ctrl+C received") // Perform any necessary cleanup or handling for Ctrl+C }() cmd.Run()
자식 프로세스의 프로세스 그룹을 분리하여 인터럽트 신호를 처리함으로써, Ctrl C가 하위 프로세스의 실행을 방해하는 것을 방지하는 동시에 상위 프로세스가 원하는 대로 중단을 처리하도록 허용할 수 있습니다.
위 내용은 Ctrl C가 exec.Command 하위 프로세스를 중단하는 것을 방지하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!