[go] go 언어의 exec 패키지를 사용하여 시그널 처리하는 방법
Go 언어에서 외부 명령을 실행하고 이 명령에 시그널을 보내는 방법을 알아보겠습니다. 시그널은 프로세스에 특정 이벤트가 발생했음을 알리는 운영 체제 수준의 메시지입니다. 이를 통해 외부 프로세스에게 종료 신호를 보내거나 다른 동작을 수행할 수 있습니다.
exec 패키지
Go 언어의 os/exec
패키지는 외부 명령을 실행하고 입출력을 조작하는 기능을 제공합니다. 또한 시그널을 보내거나 받는 기능도 포함되어 있습니다.
package main
import (
"fmt"
"os"
"os/exec"
"os/signal"
"syscall"
)
func main() {
cmd := exec.Command("myCommand")
cmd.SysProcAttr = &syscall.SysProcAttr{Setpgid: true} // 프로세스 그룹 ID 설정
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
go func() {
sig := <-signal.SIGTERM // SIGTERM 시그널 수신
fmt.Println("Received SIGTERM signal")
_ = syscall.Kill(-cmd.Process.Pid, syscall.SIGTERM) // 명령에 SIGTERM 시그널 전송
}()
err := cmd.Run()
if err != nil {
fmt.Println("Error executing command:", err)
}
}
위의 예제는 os/exec
패키지를 사용하여 명령을 실행하고, 시그널을 받아서 외부 명령에 전달하는 방법을 보여줍니다. syscall
패키지를 사용하여 시그널을 전달하는 부분을 볼 수 있습니다.
결론
Go 언어의 os/exec
패키지를 사용하여 외부 명령을 실행하고 시그널을 처리하는 방법에 대해 알아보았습니다. 이를 통해 안전하고 효율적인 외부 명령 실행 및 시그널 처리를 구현할 수 있습니다.
더 많은 정보는 공식 Go 언어 문서를 참고하시기 바랍니다.