我希望Go程序启动多个将与之交互的进程。 (我也不确定要使用哪种IPC方法,但这也许是另一个问题)
我想到的是使用os.Executable()获取正在运行的可执行文件的位置,然后使用exec
包来运行该程序的新实例。我想知道是否还有另一种方法无需查询可执行文件的路径,或者这甚至是我应该担心的行为。
答案 0 :(得分:1)
建议使用os.Executable
在最新版本的Go(see this older SO answer for details)中查找程序自己的路径。然后,您可以使用exec.Command
来运行它的更多实例。
尽管这很不寻常,所以我想知道您在这里想到的是哪种用例。根据我的经验,编排多个流程非常棘手,需要解决一个实际问题才能让您值得。
答案 1 :(得分:0)
您是对的,可以执行os.Executable()
来执行正在运行的程序的另一个实例:
path, err := os.Executable()
if err != nil {
log.Println(err)
}
cmd := exec.Command(path)
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
err = cmd.Start()
if err != nil {
log.Println(err)
}
我不知道您的情况,但是这样做不是很常见。
除非您正在考虑创建子进程(即fork / exec),否则您可能需要使用cmd.ExtraFiles
将额外的文件描述符传递给子进程,并通过信号交换的组合来创建子进程或终止父进程(通常是SIGUSR1和SIGTERM)