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

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

操作系統。Wait() 不等待 golang 中的程序終止

操作系統。Wait() 不等待 golang 中的程序終止

Go
慕姐8265434 2022-08-24 11:27:41
在我的代碼執行過程中的某個時候,我希望我的程序啟動一個編輯器(不管是哪一個)供用戶執行一些實時編輯。我需要我的程序在這一點上停止,直到用戶決定關閉編輯器(或多或少git rebase的工作方式)以下是我的工作方式func main() {    fpath := os.TempDir() + "/afile.txt"    f, err := os.Create(fpath)    if err != nil {        log.Fatal(err)    }    defer f.Close()    cmd := exec.Command("/usr/local/bin/code", fpath)    err = cmd.Start()    if err != nil {        log.Fatal(err)    }    err = cmd.Wait()    if err != nil {        fmt.Println(err)    }}不會打印任何錯誤,但是上面的代碼,盡管它當然會打開 ,但它在用戶關閉編輯器之前終止(返回)。vscode不應該處理這個問題嗎?cmd.Wait()該程序在MacOS Catalina fwiw上執行。
查看完整描述

2 回答

?
catspeake

TA貢獻1111條經驗 獲得超0個贊

cmd.Wait() 不應該處理這個問題嗎?

是的,確實如此。按預期等待,這是您的調用不正確,并且不會等待。的默認行為是在生成 VSCode 窗口后立即退出。它不會等待窗口關閉,因此 Go 不能等待窗口關閉。/usr/local/bin/codecode

嘗試簡單地在終端中輸入。你會發現它會立即退出,甚至認為你的 VSCode 窗口仍處于打開狀態。code

要在編輯器窗口關閉之前創建塊(從而允許 Go 等待),您需要將 or 標志傳遞給它。再次嘗試在終端中。在 VSCode 窗口關閉之前,你將找到終端命令塊。code-w--waitcode -w

實際上,您只需要更改此設置...

    cmd := exec.Command("/usr/local/bin/code", fpath)

對此:

    cmd := exec.Command("/usr/local/bin/code", "-w", fpath)
        // or
    // cmd := exec.Command("/usr/local/bin/code", "--wait", fpath)


查看完整回答
反對 回復 2022-08-24
?
楊__羊羊

TA貢獻1943條經驗 獲得超7個贊

根據 https://golang.org/pkg/os/exec/#Cmd.Start

“啟動”將啟動指定的命令,但不等待該命令完成。

如果 Start 成功返回,則將設置 c.Process 字段。

Wait 方法將返回退出代碼,并在命令退出后釋放關聯的資源。

如果可以的話,你可以在底部找到,在linux中。strace code+++ exited with 0 +++

基本上,啟動 vscode 的命令會退出(一種分叉),因此不會等待返回。clones

strace code -w實際上等待 vscode 退出。


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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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