2 回答
TA贡献1853条经验 获得超18个赞
始终检查错误。
从cmd.Start 文档
如果 Start 返回成功,将设置c.Process字段。
所以确保cmd.Start没有出错:
err := cmd.Start()
if err != nil {
log.Fatalf("cmd.Start error: %v", err)
}
也来自exec.Cmd 文档:
// ProcessState contains information about an exited process,
// available after a call to Wait or Run.
ProcessState *os.ProcessState
// contains filtered or unexported fields
因此,如果该过程尚未完成,ProcessState则将为零-因此您将遇到运行时恐慌。
TA贡献1841条经验 获得超3个赞
这对我有用:
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")
}
}
- 2 回答
- 0 关注
- 145 浏览
添加回答
举报