>  기사  >  백엔드 개발  >  Go에서 실패한 os.FindProcess 호출은 반드시 프로세스가 종료되었음을 의미합니까?

Go에서 실패한 os.FindProcess 호출은 반드시 프로세스가 종료되었음을 의미합니까?

Barbara Streisand
Barbara Streisand원래의
2024-11-08 07:25:02267검색

Does a Failed os.FindProcess Call in Go Necessarily Mean a Process Has Terminated?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.