分离Goroutine进入独立程序

时间:2019-05-28 19:30:26

标签: go

我有一个函数,该函数可以播放main程序打印到标准输出并退出后继续执行的声音。我的理由是,我希望声音在程序退出后结束播放,但我不希望main程序在退出前等待声音结束播放。

我找到了一种在独立过程中执行声音的方法,方法是将声音变成名为playsound的可执行文件并执行go install。然后在我的主程序中,我在main()的结尾处调用它:

func startPlaySound() {
    cmd := exec.Command("playsound")
    cmd.Start()
}

main() {
   // code that prints and exits

   startPlaySound()
}

这可行,但是我希望能够在主程序退出后播放声音而无需创建可执行文件。我宁愿在包含播放声音的代码的函数上运行cmd.Start()的等效项。

换句话说,我希望它看起来像这样:

func playSound() {
    // code that plays the sound
}

func startPlaySound() {
   cmd := CmdFromFunction(playSound)
   cmd.Start()
}

main() {
   // code that prints and exits

   startPlaySound()
}

是否存在类似CmdFromFunction的东西?

对问题反馈的回应

  • 这不是How do I fork a go process?的重复项。我不是想派发main goroutine。我试图将playSound分离为一个单独的进程,该进程将在main goroutine退出后继续执行。这个问题的两个答案都涉及执行外部程序,而这正是我要避免的事情。
  • “执行例程并不意味着要成为进程”-我将代码从playSound转换为名为playsound的可执行文件,现在正使用cmd.Start()将其作为进程执行。我只是想寻找一个比创建一个完全独立的可执行文件更直接的方法。

1 个答案:

答案 0 :(得分:-1)

  

GO例程并不意味着是进程

This可能有效。我自己做过的,但是您可能只限于bash shell。

cmd := exec.Command("bash", "-c", "playsound", "&")