首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检查exec.Command是否退出

检查exec.Command是否退出
EN

Stack Overflow用户
提问于 2022-01-05 15:51:14
回答 2查看 407关注 0票数 0

我正在尝试制作一个可以运行可执行文件的程序,如果该可执行文件在2秒内退出,则获取

代码语言:javascript
复制
files, _ := ioutil.ReadDir("Files/")

for _, f := range files {
    cmd := exec.Command(fmt.Sprint("Files/", f.Name()))
    cmd.Start()
    time.Sleep(2 * time.Second)
    if cmd.ProcessState.Exited() {
        fmt.Println("Exited")
    } else {
        fmt.Println("Not exited")
    }
}

这给出了一个panic: runtime error: invalid memory address or nil pointer dereference

因为它还没有设置(如果我使用cmd.Run(),它可以工作,但这违背了整个目的)。我试过寻找其他方法来做这件事,但我找不到其他的方法。

还有其他方法可以做到吗?如果是的话,我该如何使用呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-01-05 19:09:16

这对我起了作用:

代码语言:javascript
复制
files, _ := ioutil.ReadDir("Files/")

for _, f := range files {
    cmd := exec.Command(fmt.Sprint("Files/", f.Name()))
    cmd.Start()
    time.Sleep(2 * time.Second)

    check, _ := exec.Command("tasklist", "/FI", "PID eq "+fmt.Sprint(cmd.Process.Pid)).Output()
    output := string(check)
    if strings.HasPrefix(output, "INFO: No tasks are running") {
        fmt.Println("Exited")
    } else {
        fmt.Println("Still running")
    }
}
票数 0
EN

Stack Overflow用户

发布于 2022-01-05 15:57:19

总是检查错误。

来自cmd.Start文档

如果Start成功返回,则将设置c.Process字段。

因此,确保cmd.Start没有出错:

代码语言:javascript
复制
err := cmd.Start()
if err != nil {
    log.Fatalf("cmd.Start error: %v", err)
}

也来自exec.Cmd文档

代码语言:javascript
复制
// ProcessState contains information about an exited process,
// available after a call to Wait or Run.
ProcessState *os.ProcessState
// contains filtered or unexported fields

因此,如果进程尚未完成,那么ProcessState将为零--因此您将陷入运行时恐慌。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70595788

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档