首頁 >後端開發 >Golang >Go 中有可靠的方法來確定進程是否存在嗎?

Go 中有可靠的方法來確定進程是否存在嗎?

Barbara Streisand
Barbara Streisand原創
2024-11-06 22:34:021045瀏覽

Is There a Reliable Way to Determine Process Existence in Go?

使用os.FindProcess 確定Go 中進程是否存在

雖然使用os.FindProcess 可以提供有關進程存在的信息,但它並不完全可靠用於確定進程是否已終止或終止。

利用 Unix 方法

傳統上,Unix 命令kill -s 0 [PID] 用於檢查是否一個進程仍在運行。此方法向進程發送 0 訊號,但不發送實際訊號。相反,它是一種驗證進程是否存在的方法。

Go 中的實作

將此方法翻譯成Go,下面的程式碼示範如何判斷一個行程是否存在仍處於活動狀態:

import (
    "fmt"
    "log"
    "os"
    "os/exec"
    "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)
        }
    }
}

範例輸出

執行此程式碼將提供以下輸出,指示不同ID 的進程的狀態:

$ ./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:處於活動狀態,並且屬於目前使用者。
  • 進程 123:已終止或終止。

以上是Go 中有可靠的方法來確定進程是否存在嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn