为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
慕桂英4014372 2021-06-01 13:43:02
如果我有进程的 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}
查看完整描述

3 回答

?
蛊毒传说

TA贡献1895条经验 获得超3个赞

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



查看完整回答
反对 回复 2021-06-07
?
一只萌萌小番薯

TA贡献1795条经验 获得超7个赞

您也可以只使用syscall.Kill. 它相当于更少的代码。

killErr := syscall.Kill(pid, syscall.Signal(0))
procExists := killErr == nil


查看完整回答
反对 回复 2021-06-07
  • 3 回答
  • 0 关注
  • 1059 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号