使用 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中文网其他相关文章!