os.Wait()在golang中不等待程序终止
在整个代码执行过程中的某个时刻,我希望我的程序启动一个编辑器,而不管用户执行哪一个实时编辑 我需要我的程序在这一点上停止,直到用户决定或多或少地关闭编辑器git rebase是如何工作的 我是这样做的os.Wait()在golang中不等待程序终止,go,visual-studio-code,process,Go,Visual Studio Code,Process,在整个代码执行过程中的某个时刻,我希望我的程序启动一个编辑器,而不管用户执行哪一个实时编辑 我需要我的程序在这一点上停止,直到用户决定或多或少地关闭编辑器git rebase是如何工作的 我是这样做的 func main() { fpath := os.TempDir() + "/afile.txt" f, err := os.Create(fpath) if err != nil { log.Fatal(err) }
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上执行
cmd.Wait不应该处理这个吗
是的,的确如此。Go按预期进行等待,是您对/usr/local/bin/代码的调用不正确,并且没有等待。代码的默认行为是在生成VSCode窗口后立即退出。它不会等待窗口关闭,因此Go不能等待窗口关闭
试着在终端中简单地键入代码。您会发现它会立即退出,即使您的VSCode窗口仍然打开
要使代码块直到编辑器窗口关闭,从而允许Go To wait,您需要将-w或-wait标志传递给它。同样,在终端中尝试代码-w。在VSCode窗口关闭之前,您将找到terminal命令块
实际上,你只需要改变这个
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)
依照
Start启动指定的命令,但不等待它启动
完成
如果启动成功返回,将设置c.进程字段
Wait方法将返回退出代码并释放相关的
一旦命令退出,就可以调用资源
如果你可以搜索代码,你会发现在linux中,+++退出,底部是0++
基本上,启动vscode的命令会退出,克隆一种fork类型,因此不会等待返回
strace code-w实际上在等待vscode退出