Go에서 프로세스 존재 확인
Go에서는 os.FindProcess 함수를 사용하여 PID로 프로세스를 검색할 수 있습니다. 그러나 이 함수가 오류를 반환하면 반드시 프로세스가 종료되었음을 의미합니까?
프로세스 존재 확인
kill(2 매뉴얼 페이지에 따르면) ) Unix에서는 0의 신호를 프로세스에 보내는 것은 실제로 신호를 보내는 것이 아니라 프로세스가 살아 있는지 확인합니다. 이 접근 방식은 프로세스의 존재 여부를 확인하기 위해 Go에서 적용할 수 있습니다.
Go 구현
다음 Go 코드는 이 기술을 보여줍니다.
package main import ( "fmt" "log" "os" "strconv" "syscall" ) func main() { for _, p := range os.Args[1:] { pid, err := strconv.ParseInt(p, 10, 64) if err != nil { log.Fatal(err) } process, err := os.FindProcess(int(pid)) if err != nil { fmt.Printf("Failed to find process: %s\n", err) } else { err := process.Signal(syscall.Signal(0)) fmt.Printf("process.Signal on pid %d returned: %v\n", pid, err) } } }
샘플 출력
실행 시 이 코드는 여러 프로세스의 상태를 표시합니다.
$ ./kill 1 $$ 123 process.Signal on pid 1 returned: operation not permitted process.Signal on pid 12606 returned:process.Signal on pid 123 returned: no such process
이 예에서 프로세스 1은 현재 사용자가 소유하지 않기 때문에 오류를 반환합니다. 프로세스 12606은 살아 있고 사용자가 소유하고 있기 때문에 nil을 반환합니다. 프로세스 123은 더 이상 존재하지 않기 때문에 오류를 반환합니다.
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3