[go] os 패키지를 이용하여 프로세스 관리하기

go 언어를 사용하여 시스템 프로그래밍을 할 때 프로세스 관리는 중요한 작업 중 하나입니다. go 언어의 os 패키지를 이용하면 프로세스를 생성하고 제어할 수 있습니다.

1. 프로세스 생성

os/exec 패키지를 이용하여 외부 프로그램을 실행하고, 새로운 프로세스를 생성할 수 있습니다.

package main

import (
    "fmt"
    "os/exec"
)

func main() {
    cmd := exec.Command("ls", "-l")
    err := cmd.Run()
    if err != nil {
        fmt.Println(err)
    }
}

위 코드는 “ls -l” 명령어를 실행하여 새로운 프로세스를 생성하는 예제입니다.

2. 프로세스 제어

생성된 프로세스를 제어할 수도 있습니다.

package main

import (
    "fmt"
    "os/exec"
)

func main() {
    cmd := exec.Command("sleep", "5")
    err := cmd.Start()
    if err != nil {
        fmt.Println(err)
    }
    
    err = cmd.Wait()
    if err != nil {
        fmt.Println(err)
    }
}

위 코드는 “sleep 5” 명령어를 실행하고, 해당 프로세스가 종료될 때까지 대기하는 예제입니다.

3. 프로세스 종료

os.Signal을 사용하여 실행 중인 프로세스에 시그널을 보내 프로세스를 종료할 수 있습니다.

package main

import (
    "fmt"
    "os"
    "os/exec"
    "os/signal"
    "syscall"
)

func main() {
    cmd := exec.Command("sleep", "5")
    cmd.Start()

    sigChan := make(chan os.Signal, 1)
    signal.Notify(sigChan, syscall.SIGINT, syscall.SIGTERM)
    
    <-sigChan
    cmd.Process.Kill()
    fmt.Println("프로세스를 종료했습니다.")
}

위 코드는 “sleep 5” 명령어를 실행하고, 시그널을 받으면 해당 프로세스를 종료하는 예제입니다.

go 언어의 os 패키지를 이용하여 프로세스를 생성하고 제어하는 방법을 알아보았습니다. 프로세스 관리는 시스템 프로그래밍에서 중요한 요소이므로, 이러한 기능을 익히고 활용할 수 있으면 유용합니다.

[참고 자료]