【发布时间】:2020-02-21 18:03:07
【问题描述】:
我正在寻找一种从 Go 程序中启动完全独立的程序实例的方法。到目前为止,这是我最好的尝试:
// Some code
go exec.Command("konsole", "--hold", "--separate", "sh", "-e", "go", "run", "test.go")
.Run()
// Continue doing something else then quit
使用 linux KDE 的 Konsole。这个命令“几乎”起作用——它启动一个新的 Konsole 实例并运行程序。但它们是相互依赖的:如果第一个程序结束(ctrl+c),第二个程序也结束。有没有办法解决这个问题?
【问题讨论】:
-
这与子进程(实际上是子进程的子进程的子进程)是Go程序无关。
-
@Adrian 很公平,我把它改成了程序。
-
在后台运行的程序,独立于启动它的程序,其输出流关闭或重定向到日志文件,称为“守护程序”。将进程作为守护进程运行不仅仅是一次调用,这些关键字应该会给您一个提示。也许stackoverflow.com/questions/10027477/how-to-fork-a-process 会有所帮助。
-
如果 Ctrl-C 是主要问题,你可以把它放在不同的进程组中
标签: linux go concurrency konsole