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: <nil> process.Signal on pid 123 returned: no such process
이 예에서 프로세스 1은 현재 사용자가 소유하지 않기 때문에 오류를 반환합니다. 프로세스 12606은 살아 있고 사용자가 소유하고 있기 때문에 nil을 반환합니다. 프로세스 123은 더 이상 존재하지 않기 때문에 오류를 반환합니다.
위 내용은 Go에서 실패한 os.FindProcess 호출은 반드시 프로세스가 종료되었음을 의미합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!