什么是开始使用Golang正在运行的程序的另一个实例的好方法?

问题描述 投票:-1回答:2

我想Go程序启动多个进程,它会与互动。 (我还用了什么方法IPC未定,但也许是另外一个问题)

在事我想的是用os.Executable()来获得运行可执行文件的位置,然后将exec包运行程序的新实例。我不知道是否有另一种方式来做到这一点,而无需查询可执行文件的路径,或者如果这是一个连我的行为应该担心。

go process fork multiprocess
2个回答
1
投票

使用os.Executable是找到最新版本围棋(see this older SO answer for details)的程序本身路径的推荐方式。然后你就可以使用exec.Command来运行它的多个实例。

这是相当不寻常的,所以我不知道你脑子里有什么用例在这里。编排多个进程是棘手,需要解决一个真正的问题你是值得的,在我的经验。


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)
}

我不知道您的方案,但这样做是不是很常见。

除非你想在创建子(一拉叉/执行),所以也许你需要使用cmd.ExtraFiles孩子和信号交换的组合来创建子通过额外的文件描述符或终止母公司(通常SIGUSR1和SIGTERM)

© www.soinside.com 2019 - 2024. All rights reserved.