Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
os.Wait()在golang中不等待程序终止_Go_Visual Studio Code_Process - Fatal编程技术网

os.Wait()在golang中不等待程序终止

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

在整个代码执行过程中的某个时刻,我希望我的程序启动一个编辑器,而不管用户执行哪一个实时编辑

我需要我的程序在这一点上停止,直到用户决定或多或少地关闭编辑器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上执行

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退出