登录
首页 >  Golang >  Go问答

将 Goroutine 转化为独立的进程

来源:stackoverflow

时间:2024-03-07 20:03:26 294浏览 收藏

学习Golang要努力,但是不要急!今天的这篇文章《将 Goroutine 转化为独立的进程》将会介绍到等等知识点,如果你想深入学习Golang,可以关注我!我会持续更新相关文章的,希望对大家都能有所帮助!

问题内容

我有一个函数可以播放声音,我想在 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 这样的东西?

对问题反馈的回复

  • 这不是“如何分叉 go 进程?”的重复内容。我不想分叉 main goroutine。我正在尝试将 playsound 分离到一个单独的进程中,该进程将在 main goroutine 退出后继续执行。该问题的两个答案都涉及执行外部程序,这正是我试图避免的。
  • “go 例程并不意味着是进程” - 我实际上将 playsound 中的代码转换为名为 playsound 的可执行文件,并且现在使用 cmd.start() 将其作为进程执行。我只是想找到一种比创建完全独立的可执行文件更直接的途径。

解决方案


This 可能有用。我自己已经这样做了,但你可能仅限于 bash shell。

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

今天关于《将 Goroutine 转化为独立的进程》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于的内容请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>