GO进程正在运行.我也想

  1. 转储其每个goroutine的堆栈跟踪
  2. 从外部看,不依赖于我在其源代码中添加的任何内容
  3. 而不会杀死它.

我怎么才能做到这一点呢?

这应该很简单--请求的特性是:https://code.google.com/p/go/issues/detail?id=2516,并且根据该线程的结论实现了该特性.那是两年多前的事了.但是,发出线程和提交都不包含任何关于如何调用此功能的提示.

特性请求提到SIGQUIT是JVM接受的调用相应特性的信号.但SIGQUIT不是答案;在go1上.2至少,SIGQUIT会执行#1和#2,但也会终止进程.

不久前有人在这里问了一个相关的问题:How to dump goroutine stacktraces?

推荐答案

如果您使用的是net/http,则可以通过调试处理程序访问goroutines.如果你看看下面的资料

http://golang.org/src/pkg/runtime/pprof/pprof.go

You will see the profile, goroutineProfile, on line 62. This profile writes out via writeGoroutine. If writeGoroutine is called with debug >= 2 then it will write out all goroutines.

你应该能用curl http://localhost:<port>/debug/pprof/goroutine?debug=2英镑把所有的goroutines都甩了.不幸的是,我没有看到任何调用该代码的信号处理程序的引用,但您可以查看pprof如何利用上述源代码中的runtime.Stack轻松实现这一点的引用.

Go相关问答推荐

为什么在GO中打印变量会导致堆栈溢出?

如何使用Docker Compose配置Go,使main. go文件位于/CMD文件夹中

读取JSON数据并在网页上显示

转到http服务器头内容-类型设置为多部分/表单-数据,但在客户端获取内容-类型:文本/纯文本

死锁 - 所有 goroutine 都处于睡眠状态(即使使用等待组)

go-jwt 令牌验证错误 - 令牌签名无效:密钥类型无效

从 ApiGateway 中的 lambda Go 返回 Json

如何在 fyne-io/fyne 中设置文本的字母间距?

使用 LINQ 对内部数组进行排序

如何使用名称具有包名称的嵌套 struct 启动 go struct

创建新对象后如何返回嵌套实体?

Golang 中具体类型的错误片段

读取非UTF8编码的文件内容并正确打印出来

如何在切片增长时自动将切片的新元素添加到函数参数

无法使用 Golang 扫描文件路径

如何在golang中按字符a对字符串数组进行排序

使用 Golang SQL 驱动程序连接到snowflake

Golang Echo Labstack 如何在模板视图中调用函数/方法

递归数据 struct 解组在 Go Lang Protobuf 中给出错误无法解析无效的线格式数据

Terraform 自定义提供程序 - 数据源架构