Go進程正在運行。我想如何轉儲所有Go進程的堆棧?
- 轉儲它的每一個夠程
- 來自外部的堆棧跟蹤,不依賴於任何我添加到它的源代碼
- 沒有殺死它。
我該怎麼做?
這應該很容易 - 功能被要求:https://code.google.com/p/go/issues/detail?id=2516,並根據該線程的結論,實施。那是兩年前的事了。但是,問題線程和提交都不包含有關如何調用此功能的任何提示。
功能請求提到SIGQUIT調用JVM上的相應功能,但事實並非如此;至少在go1.2上,SIGQUIT會執行#1和#2,但也會殺死進程。
前一個人有人問這個問題:How to dump goroutine stacktraces? 但他們沒有明確要求#2或#3,沒有答案滿足#2,他們接受了一個不符合#2的答案。所以這是一個不同的問題。
看起來你必須在程序中添加一些東西來捕獲SIGQUIT並在鏈接的答案中運行代碼。我沒有看到Brad的更改列表中的任何內容,表明它添加了默認的信號處理程序或類似的東西。 – twotwotwo