os.FindProcess에만 의존하지 않고 Go에서 프로세스의 존재를 확인하는 방법
Go에서 프로세스를 다룰 때 자연스러운 특정 PID를 가진 프로세스가 존재하는지 확인하기 위해 os.FindProcess를 활용하는 것이 좋습니다. 그러나 이 방법에만 의존하면 부정확한 결론을 내릴 수 있습니다.
os.FindProcess의 한계
os.FindProcess는 운영 체제에서 프로세스에 대한 정보를 효과적으로 쿼리합니다. . 지정된 PID를 가진 프로세스가 존재하면 오류가 아닌 결과를 반환합니다. 그러나 프로세스가 이미 종료된 경우 운영 체제가 아직 프로세스를 회수하지 않은 경우(즉, 시스템의 프로세스 테이블에서 해당 항목을 제거한 경우) os.FindProcess는 여전히 성공을 보고할 수 있습니다. 이는 프로세스가 실제로 종료되었지만 여전히 실행 중임을 암시하는 오탐지로 이어질 수 있습니다.
대체 솔루션 탐색: 신호 보내기
프로세스가 존재하는 경우 대상 프로세스에 0(영) 신호를 보내는 전통적인 Unix 접근 방식을 사용할 수 있습니다. 이 기술은 다음과 같은 이유로 작동합니다.
Implementing the Signal-Based Solution in Go
다음은 이를 사용하는 Go 함수의 예입니다. 접근 방식:
package main import ( "fmt" "log" "os" "os/signal" "strconv" ) // checkProcessExistence sends a signal of 0 to a process to determine its existence. func checkProcessExistence(pid int) bool { process, err := os.FindProcess(pid) if err != nil { log.Fatal(err) } err = process.Signal(signal.Signal(0)) if err != nil { return false } return true } func main() { for _, p := range os.Args[1:] { pid, err := strconv.ParseInt(p, 10, 64) if err != nil { log.Fatal(err) } if checkProcessExistence(int(pid)) { fmt.Printf("Process with PID %d is running\n", pid) } else { fmt.Printf("Process with PID %d is not running\n", pid) } } }
사용 예
프로세스 A의 PID가 있고 프로세스 A가 아직 실행 중인지 확인하고 싶다고 가정해 보겠습니다.
$ go run main.go 12345 Process with PID 12345 is running
이 출력은 프로세스 12345가 실제로 살아 있음을 확인시켜 줍니다.
위 내용은 Go Beyond os.FindProcess에서 프로세스 존재를 안정적으로 확인하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!