[go] go 언어의 exec 패키지를 사용하여 프로세스 실행시간 제한 설정하는 방법

Go 언어에서 exec 패키지를 사용하여 다른 프로세스를 실행할 때 실행 시간 제한을 설정하는 방법을 알아보겠습니다.

exec 패키지란?

exec 패키지는 Go 언어에서 외부 명령어나 프로그램을 실행하고 다룰 수 있는 기능을 제공합니다.

프로세스 실행시간 제한 설정하는 방법

다른 프로세스의 실행 시간을 제한하는 방법은 ContextContext.WithTimeout 함수를 사용하여 구현할 수 있습니다. 아래 예제 코드를 통해 자세히 알아보겠습니다.

package main

import (
	"context"
	"fmt"
	"os/exec"
	"time"
)

func main() {
	// 실행할 명령어
	cmd := exec.Command("sleep", "10")

	// 실행 시간 제한 설정 (예: 5초)
	ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
	defer cancel()

	// 명령어 실행
	if err := cmd.Start(); err != nil {
		fmt.Println("명령어 실행 실패:", err)
		return
	}

	// 실행 시간 제한 초과 여부 확인
	done := make(chan error, 1)
	go func() {
		done <- cmd.Wait()
	}()

	select {
	case <-ctx.Done():
		// 실행 시간 초과
		fmt.Println("실행 시간 초과")
		cmd.Process.Kill()
		<-done // 명령어가 완전히 종료될 때까지 대기
	case err := <-done:
		// 명령어 실행 완료
		if err != nil {
			fmt.Println("명령어 실행 실패:", err)
		} else {
			fmt.Println("명령어 실행 성공")
		}
	}
}

위 예제 코드에서는 sleep 10 명령어를 10초 동안 실행하고, 실행 시간을 5초로 제한하고 있습니다.

마무리

이렇게 exec 패키지를 사용하여 Go 언어에서 프로세스 실행시간을 제한하는 방법에 대해 알아보았습니다. 필요에 따라 실행시간 제한을 설정하여 안정적인 프로그램을 개발할 수 있습니다.

참고문헌: