【发布时间】:2014-06-14 19:25:39
【问题描述】:
Go 进程正在运行。我想要
- 为每个 goroutine 转储堆栈跟踪
- 从外部看,不依赖于我在其源代码中添加的任何内容
- 没有杀死它。
我该怎么做?
这应该很容易——请求的功能是:https://code.google.com/p/go/issues/detail?id=2516,并且根据该线程的结论,已实现。那是两年多以前的事了。但是问题线程和提交都没有包含有关如何调用此功能的任何提示。
功能请求提到 SIGQUIT 作为 JVM 接受的信号以调用那里的相应功能。但 SIGQUIT 不是答案。至少在 go1.2 上,SIGQUIT 会执行 #1 和 #2,但也会终止进程。
前段时间有人在这里问了一个相关的问题:How to dump goroutine stacktraces? 但他们没有明确要求#2 或#3,没有一个答案符合#2,他们接受了一个不符合#2 的答案。所以这是一个不同的问题。
【问题讨论】:
-
看起来您必须在程序中添加一些内容才能捕获 SIGQUIT 并运行您链接的答案中的代码。我在 Brad 的更改列表中没有看到任何暗示它添加了默认信号处理程序或类似内容的内容。
标签: go