> 백엔드 개발 > Golang > Ctrl C가 exec.Command 하위 프로세스를 중단하는 것을 방지하는 방법은 무엇입니까?

Ctrl C가 exec.Command 하위 프로세스를 중단하는 것을 방지하는 방법은 무엇입니까?

Mary-Kate Olsen
풀어 주다: 2024-12-15 02:36:10
원래의
995명이 탐색했습니다.

How to Prevent Ctrl C from Interrupting exec.Command Child Processes?

exec.Command에서 Ctrl C 중단 처리

exec.Command를 사용하여 외부 프로세스를 실행할 때 다음과 같은 중단 방법을 고려하는 것이 중요합니다. Ctrl C가 처리됩니다. 기본적으로 Ctrl C를 누르면 하위 프로세스를 포함한 전체 프로세스 그룹이 중단됩니다. 특정 프로세스의 중단을 방지하려는 경우 이 동작은 문제가 될 수 있습니다.

이 문제를 해결하고 Ctrl C가 하위 프로세스를 중단하지 않도록 하려면 다음 단계를 따르세요.

  1. 프로세스 그룹 설정: 하위 프로세스를 실행하기 전에 SysProcAttr 필드를 사용하여 프로세스를 구성합니다. group.

    cmd := exec.Command("sleep", "60")
    cmd.SysProcAttr = &syscall.SysProcAttr{
        Setpgid: true,
    }
    로그인 후 복사
  2. 신호 처리: 상위 프로세스에서 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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