package main
import (
"fmt"
"io/ioutil"
"os"
"strconv"
"syscall"
)
func ShowProcessInfo(pid int) {
err := syscall.PtraceAttach(pid)
if err != nil {
panic(err)
}
_, err = syscall.Wait4(pid, nil, 0, nil)
if err != nil {
panic(err)
}
var regs syscall.PtraceRegs
err = syscall.PtraceGetRegs(pid, ®s)
if err != nil {
panic(err)
}
err = syscall.PtraceDetach(pid)
if err != nil {
panic(err)
}
fmt.Println("pid:", pid)
fmt.Println(regs.Rsp)
}
func ShowProcessStack(pid string) {
dirs, err := ioutil.ReadDir(fmt.Sprintf("/proc/%s/task", pid))
if err != nil {
panic(err)
}
for _, dir := range dirs {
sub_pid, _ := strconv.ParseInt(dir.Name(), 10, 32)
ShowProcessInfo(int(sub_pid))
}
}
func main() {
ShowProcessStack(os.Args[1])
}
顯示所有子線程
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
相關(guān)閱讀更多精彩內(nèi)容
- 這樣的log是沒有錯誤的。 主線程中的log會提示news為空指針 子線程無法更新UI眾所周知,需要通過Handl...
- 方法很多,方法1:可以使用線程池的方法,方法2:也可以輕量級的創(chuàng)建多個Thread,再結(jié)合CountDownLat...
- 最近看golang main函數(shù)結(jié)束,所有協(xié)程都被結(jié)束了結(jié)論是這樣:A不是main程的情況下,在A程里開啟B程,A...