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