【问题标题】:keep external process running after exit退出后保持外部进程运行
【发布时间】:2021-03-24 11:43:57
【问题描述】:

如何在主退出后保持进程运行?

更新:原来只有在goland跑步时才会这样。包括 cmets 在内的公认答案解决了这个问题。

信息:我有一个监视文件夹更改的可执行文件,我需要从 go 启动它并在退出后保持运行。

我看到了this,但它并没有解决退出后运行进程的问题。

package main

import "os/exec"

func main() {
    cmd := exec.Command("sh", "long_running process", "&")
    cmd.Start()
}
fmt.Println("Sleeping...")
time.Sleep(8 * time.Second) // I can see the process running

之后,当我执行“ps”时,主应用程序会终止该进程。

【问题讨论】:

  • 如果你放一个长的Time.Sleep你能验证长时间运行的进程是否正在使用ps运行?
  • 谢谢,是的,我可以验证进程正在运行。
  • Goland 可能正在杀死进程组。见stackoverflow.com/questions/35433741/…

标签: go goland


【解决方案1】:

我无法重现您遇到的问题。当我运行sleep 命令并且goroutine 终止时,当我使用ps 搜索它时它仍在运行

更新

  1. 无法使用 GoLand 中的调试器运行它。
  2. 除了如果您在调试选项窗口中启用以sudo 运行。
  3. 不带sudo:要么带go run,要么带dlv debug,要么不带 GoLand 中的调试器。
package main

import (
    "os/exec"
)

func main() {
    cmd := exec.Command("sleep", "99999999")
    cmd.Start()
}
~/tempgo/process
▶ go run process.go

~/tempgo/process
▶ ps -ax | grep "sleep"
29907 ttys002    0:00.00 sleep 99999999
29925 ttys002    0:00.00 grep --color=auto --exclude-dir=.bzr --exclude-dir=CVS --exclude-dir=.git --exclude-dir=.hg --exclude-dir=.svn --exclude-dir=.idea --exclude-dir=.tox sleep

~/tempgo/process

【讨论】:

  • 谢谢,但不,“睡眠”应用程序随着 main 的退出而消失了。我将使用“睡眠”更新我的问题。
  • 您是通过调试器运行它吗? (或通过 Goland 或 VS 代码?)
  • 在 goland 中附带和不附带调试器的情况。嗯,好问题,我会在戈兰以外的地方试试……
  • 它在 Goland 不起作用...来自终端的 go run... 起作用。
  • 任何解释为什么 goland 不允许这个工作?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-05-06
  • 1970-01-01
  • 1970-01-01
  • 2011-09-03
  • 2013-03-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多