I have a Golang code which must run a detached child process.
The Linux version of my implementation using syscall.ForkExec
like this.
syscall.ForkExec(my_program, []string{}, nil)
But I can't found Windows implementation. I have found a proposition using START /B
.
cmd := exec.Command("START", "/B", my_program)
cmd.Start()
Unfortunately, START
can't be found and I have no other solution using Golang.
start
is not a standalone application, it's an (internal) command of the Windows command line interpreter (cmd.exe
) (details: Command line reference / Start), so you need a "shell" to run the start
command.
Use cmd.exe
with the /C
parameter, and pass start
and your application to run.
Like in this example:
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)
}
Or without the command slice:
cmd := exec.Command("cmd.exe", "/C", "start", `c:\path\to\your\app\myapp.exe`)
if err := cmd.Run(); err != nil {
log.Println("Error:", err)
}
You may also pass the /b
param to start
like this if you don't want a terminal window for the launched application:
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)
}