"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > Go에서 실패한 os.FindProcess 호출은 반드시 프로세스가 종료되었음을 의미합니까?

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

2024년 11월 14일에 게시됨
검색:555

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: 
process.Signal on pid 123 returned: no such process

이 예에서 프로세스 1은 현재 사용자가 소유하지 않기 때문에 오류를 반환합니다. 프로세스 12606은 살아 있고 사용자가 소유하고 있기 때문에 nil을 반환합니다. 프로세스 123은 더 이상 존재하지 않기 때문에 오류를 반환합니다.

최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3