如何启动子进程,当我的主进程退出时退出

时间:2021-03-10 15:37:03

标签: go

我有一个简单的 Go 应用程序,它偶尔会在后台运行 bash 脚本。

为简单起见,我只是在后台启动了一个网页。

#!/bin/env bash

chrome https://www.google.com

现在可能会发生两件事:

  1. 已经打开了一个 chrome 窗口。在这种情况下,chrome 会在现有窗口中打开 URL 并退出。
  2. 还没有打开 chrome 窗口。在这种情况下,chrome 命令成为 chrome 主进程并绑定到浏览器窗口。这意味着如果我不关闭浏览器窗口,该进程不会退出并且如果我的 Go 应用程序退出,浏览器将退出(因为它是一个子进程)。

我不希望第二种情况发生!因为在那种情况下,如果我退出应用程序 chrome 也会退出,我不希望那样。

我能否在 Go 中以某种方式启动一个进程(使用 exec.Command 之类的东西)并将其与我的应用程序完全断开连接,以便该进程独立运行(不随我的进程退出,也不会阻止它)?< /p>

1 个答案:

答案 0 :(得分:2)

这似乎对我有用:

package main
import "os/exec"

func main() {
   exec.Command(`C:\Windows\notepad`).Start()
}

回复评论。关于Wait,如果你调用Wait,它本质上 与调用 Run 相同。 Wait 的重点是它允许你把 命令开始和您等待它之间的代码 完全的。与 Run 相比,“开始”和“等待”发生在一个正确的位置 在另一个之后,没有选择在两者之间放置任何东西。或者在这种情况下, 您根本不想要 Wait 的地方。

https://golang.org/pkg/os/exec#Cmd.Start