猿问

以go方式检查进程是否存在

如果我有进程的 PID,os.FindProcess 是否足以测试进程的存在?我的意思是,如果它返回err,我可以假设它已终止(或被杀死)吗?


编辑:


我刚刚写了一个包装函数kill -s 0(旧式 bash 进程测试)。这没有任何问题,但如果有其他解决方案(使用 go 库完成)解决此问题,我仍然很高兴。:


func checkPid(pid int) bool {

    out, err := exec.Command("kill", "-s", "0", strconv.Itoa(pid)).CombinedOutput()

    if err != nil {

        log.Println(err)

    }


    if string(out) == "" {

        return true // pid exist

    }

    return false

}


慕桂英4014372
浏览 1060回答 3
3回答

蛊毒传说

在类 Unix 系统(linux、freebsd 等)上,os.FindProcess 永远不会返回错误。我不知道在 Windows 上会发生什么。这意味着在您尝试使用 *os.Process 之前,您不会知道 PID 是否正确。

一只萌萌小番薯

您也可以只使用syscall.Kill. 它相当于更少的代码。killErr := syscall.Kill(pid, syscall.Signal(0)) procExists := killErr == nil
随时随地看视频慕课网APP

相关分类

Go
我要回答