簡體   English   中英

使用Golang啟動正在運行的程序的另一個實例的好方法是什么?

[英]What is a good way to start another instance of the running program using Golang?

我想要一個Go程序來啟動將與之交互的多個進程。 (我也不確定要使用哪種IPC方法,但這也許是另一個問題)

我想到的是使用os.Executable()獲取正在運行的可執行文件的位置,然后使用exec程序包運行該程序的新實例。 我想知道是否還有另一種方法無需查詢可執行文件的路徑,或者這是否是我應該擔心的行為。

建議使用os.Executable在最新版本的Go中查找程序自己的路徑( 有關詳細信息,請參見此舊的SO答案 )。 然后,您可以使用exec.Command來運行它的更多實例。

雖然這很不尋常,所以我想知道您在這里想到的是什么用例。 根據我的經驗,編排多個流程非常棘手,需要解決一個實際問題才能讓您值得。

沒錯,要執行正在運行的程序的另一個實例,可以使用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將額外的文件描述符cmd.ExtraFiles給子對象,並通過信號交換的組合來創建子對象或終止父對象(通常為SIGUSR1和SIGTERM) )

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM