[go] os 패키지를 활용하여 프로세스 간 통신 및 IPC

본 포스트에서는 Go 언어에서 os 패키지를 활용하여 프로세스 간 통신과 Inter-Process Communication (IPC)을 수행하는 방법에 대해 알아보겠습니다.

1. 프로세스 간 통신

Go에서는 os/exec 패키지를 통해 외부 프로그램을 실행하고 그 결과를 얻을 수 있습니다. 다음은 os/exec 패키지를 사용하여 다른 프로세스의 실행 및 표준 입출력을 처리하는 방법입니다.

package main

import (
	"fmt"
	"os/exec"
)

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

위 예제는 ls -l 명령어를 실행하고 그 결과를 표준 출력으로 가져오는 간단한 예제입니다.

2. IPC (Inter-Process Communication)

os 패키지는 또한 프로세스 간 통신을 위한 다양한 기능을 제공합니다. 예를 들어, os.Pipe 함수를 사용하여 파이프를 생성하고 두 프로세스 간에 데이터를 주고받을 수 있습니다.

package main

import (
	"fmt"
	"os"
)

func main() {
	reader, writer, _ := os.Pipe()
	go func() {
		writer.Write([]byte("Hello from child process"))
		writer.Close()
	}()

	data := make([]byte, 100)
	n, _ := reader.Read(data)
	fmt.Println(string(data[:n]))
	reader.Close()
}

위 예제는 부모 프로세스와 자식 프로세스 간에 데이터를 주고받는 간단한 파이프를 설정하는 방법을 보여줍니다.

결론

이러한 간단한 예제들을 통해 os 패키지를 통해 Go 프로그램에서 다른 프로세스와 통신하고 데이터를 교환하는 방법에 대해 살펴보았습니다. os/execos.Pipe를 비롯한 다양한 함수를 사용하여 프로세스 간 통신을 유연하게 처리할 수 있습니다.

참고: Go 공식 문서 - os 패키지, Go 공식 문서 - os/exec 패키지

다른 관련 글 보기: