Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- 티스토리챌린지
- MySQL
- Elasticsearch
- Pinpoint
- CKA 기출문제
- mysql 튜닝
- 기록으로 실력을 쌓자
- 정보처리기사 실기 기출문제
- 공부
- Kubernetes
- 오블완
- AI
- Java
- CloudWatch
- 정보처리기사 실기
- APM
- Spring
- minikube
- 코틀린 코루틴의 정석
- AWS EKS
- 정보처리기사실기 기출문제
- IntelliJ
- kotlin
- kotlin coroutine
- aws
- kotlin spring
- kotlin querydsl
- PETERICA
- Linux
- CKA
Archives
- Today
- Total
피터의 개발이야기
[GO] Golang에서 Linux 명령어 실행 및 관리하기 본문
반응형
ㅁ 들어가며
이 글에서는 Golang을 사용하여 Linux 명령어를 실행하고, 실행된 프로세스를 sync.Map
으로 관리한 후 종료하는 방법에 대해 정리하였다.
ㅁ 필요한 패키지 import
package main
import (
"fmt"
"os/exec"
"sync"
"syscall"
)
ㅇ 먼저 필요한 패키지들을 import 한다.
ㅁ 명령어 실행 및 관리 함수 작성
var processMap sync.Map
func runCommand(name string, args ...string) (*exec.Cmd, error) {
cmd := exec.Command(name, args...)
err := cmd.Start()
if err != nil {
return nil, err
}
processMap.Store(cmd.Process.Pid, cmd)
return cmd, nil
}
ㅇ Linux 명령어를 실행하고 sync.Map에 저장하는 함수를 작성.
ㅁ 프로세스 종료 함수 작성
func killProcess(pid int) error {
value, ok := processMap.Load(pid)
if !ok {
return fmt.Errorf("process with PID %d not found", pid)
}
cmd := value.(*exec.Cmd)
err := cmd.Process.Signal(syscall.SIGTERM)
if err != nil {
return err
}
processMap.Delete(pid)
return nil
}
ㅇ sync.Map에 저장된 프로세스를 종료하는 함수를 작성.
ㅁ 메인 함수 작성
func main() {
// 'sleep' 명령어 실행
cmd, err := runCommand("sleep", "100")
if err != nil {
fmt.Printf("Error starting command: %v\n", err)
return
}
fmt.Printf("Started process with PID: %d\n", cmd.Process.Pid)
// 프로세스 종료
err = killProcess(cmd.Process.Pid)
if err != nil {
fmt.Printf("Error killing process: %v\n", err)
return
}
fmt.Println("Process terminated successfully")
}
ㅇ 이제 위에서 작성한 함수들을 사용하여 메인 함수를 작성.
ㅁ 실행 결과
Started process with PID: 46410
Process terminated successfully
ㅇ 이 프로그램을 실행한 결과이다.
ㅁ 마무리
이 예제에서는 Golang을 사용하여 Linux 명령어를 실행하고, sync.Map
을 사용하여 실행된 프로세스를 관리하는 방법을 살펴보았다. sync.Map
은 동시성 안전한 맵 구현을 제공하여 여러 고루틴에서 안전하게 프로세스 정보를 관리할 수 있게 해준다. 이 방식을 사용하면 여러 Linux 명령어를 동시에 실행하고 관리할 수 있으며, 필요에 따라 개별 프로세스를 종료할 수 있다.
ㅁ 함께 보면 좋은 사이트
ㅇ How to execute Linux commands in Golang
ㅇ Executing Long Running Commands
ㅇ 동시적이고 안전한 매핑을 구현하려면 golang의 sync.Map 함수를 사용하세요.
반응형
'Programming > GO' 카테고리의 다른 글
[GO] Go의 fsnotify 라이브러리를 활용한 파일 시스템 감시 (0) | 2025.02.20 |
---|---|
[GO] Go 언어에서 sync.Map 사용하기 (0) | 2025.02.18 |
[GO] Go Race Detector: 동시성 버그를 잡아내는 강력한 도구 (0) | 2025.02.16 |
[GO] Go 언어에서의 "fatal error: concurrent map read and map write" 해결하기 (0) | 2025.02.15 |
[GO] Go 애플리케이션 메모리 사용량 증가 문제 해결 방법 (0) | 2025.02.11 |
Comments