首页  >  文章  >  后端开发  >  Go 中有可靠的方法来确定进程是否存在吗?

Go 中有可靠的方法来确定进程是否存在吗?

Barbara Streisand
Barbara Streisand原创
2024-11-06 22:34:02976浏览

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