亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

檢查 exec.Command 是否退出

檢查 exec.Command 是否退出

Go
哈士奇WWW 2022-10-24 15:11:08
我正在嘗試制作一個可以運行可執行文件的程序,并獲取可執行文件是否在 2 秒內退出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()它可以工作,但這會破壞整個目的)。我已經嘗試尋找其他方法來做到這一點,但我找不到任何其他方法。還有其他方法可以做到這一點嗎?如果是這樣,我該如何使用它?
查看完整描述

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則將為零-因此您將遇到運行時恐慌。


查看完整回答
反對 回復 2022-10-24
?
偶然的你

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")

    }

}


查看完整回答
反對 回復 2022-10-24
  • 2 回答
  • 0 關注
  • 181 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號