Go进程正在运行。我想要
我怎样才能做到这一点?
这应该很容易-请求该功能:https : //code.google.com/p/go/issues/detail?id=2516并根据该线程的结论进行了实施。那是两年多以前了。但是问题线程和提交都没有任何有关如何调用此功能的提示。
功能请求提到了 SIGQUIT ,这是JVM接受在那里调用相应功能的信号。但是SIGQUIT并不是答案。至少在go1.2上,SIGQUIT会执行#1和#2的操作,但也会终止进程。
不久前有人在这里问了一个相关的问题:如何转储goroutinestacktraces?但是他们没有明确要求#2或#3,没有一个答案符合#2,他们接受了一个不符合#2的答案。所以这是一个不同的问题。
如果您使用的是net / http,则可以通过调试处理程序访问goroutine。如果您看以下资料
http://golang.org/src/pkg/runtime/pprof/pprof.go
您将goroutineProfile在第62行看到配置文件。该配置文件通过写入writeGoroutine。如果使用debug> =2调用writeGoroutine,则它将写出所有goroutine。
goroutineProfile
writeGoroutine
您应该能够将curl http://localhost:<port>/debug/pprof/goroutine?debug=2所有goroutines转储。不幸的是,我没有看到任何调用该代码的信号处理程序的引用,但是您可以在runtime.Stack上面的源代码中看到有关pprof如何利用它来轻松实现自己的引用。
curl http://localhost:<port>/debug/pprof/goroutine?debug=2
runtime.Stack