dongque5529 2018-05-25 14:22
浏览 319
已采纳

使用Golang在Windows上启动分离过程

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.

  • 写回答

1条回答 默认 最新

  • dongrong6235 2018-05-25 14:57
    关注

    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)
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 请问我该如何添加自己的数据去运行蚁群算法代码
  • ¥20 用HslCommunication 连接欧姆龙 plc有时会连接失败。报异常为“未知错误”
  • ¥15 网络设备配置与管理这个该怎么弄
  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码