我有一个Golang代码,必须运行一个独立的子进程。
我的实现的Linux版本使用syscall.ForkExec
这样。
syscall.ForkExec(my_program, []string{}, nil)
但我找不到Windows实现。我找到了一个使用START /B
的命题。
cmd := exec.Command("START", "/B", my_program)
cmd.Start()
不幸的是,找不到START
,而且我没有使用Golang的其他解决方案。
答案 0 :(得分:4)
start
不是一个独立的应用程序,它是Windows命令行解释器(cmd.exe
)的一个(内部)命令(详情:Command line reference / Start),所以你需要a" shell"运行start
命令。
将cmd.exe
与/C
参数一起使用,并传递start
并运行您的应用程序。
就像这个例子一样:
s := []string{"cmd.exe", "/C", "start", `c:\path\to\your\app\myapp.exe`}
cmd := exec.Command(s[0], s[1:]...)
if err := cmd.Run(); err != nil {
log.Println("Error:", err)
}
或者没有命令切片:
cmd := exec.Command("cmd.exe", "/C", "start", `c:\path\to\your\app\myapp.exe`)
if err := cmd.Run(); err != nil {
log.Println("Error:", err)
}
如果您不想要启动的应用程序的终端窗口,您也可以将/b
param传递给start
:
cmd := exec.Command("cmd.exe", "/C", "start", "/b", `c:\path\to\your\app\myapp.exe`)
if err := cmd.Run(); err != nil {
log.Println("Error:", err)
}
答案 1 :(得分:0)
我不清楚你所说的分离是什么意思。如果你的意思是从某种意义上说,“不要 等待程序完成”,你不需要一个外壳:
package main
import "os/exec"
func main() {
exec.Command("firefox", "google.com/search?q=golang").Start()
}