@@ -67,3 +67,67 @@ func filterNonASCII(data []byte) string {
6767func sanitizeString (s string ) string {
6868 return strings .TrimSpace (s )
6969}
70+
71+
72+ // 线程状态常量
73+ const (
74+ TASK_RUNNING = 0x00000000
75+ TASK_INTERRUPTIBLE = 0x00000001
76+ TASK_UNINTERRUPTIBLE = 0x00000002
77+ TASK_STOPPED = 0x00000004
78+ TASK_TRACED = 0x00000008
79+ EXIT_DEAD = 0x00000010
80+ EXIT_ZOMBIE = 0x00000020
81+ EXIT_TRACE = EXIT_ZOMBIE | EXIT_DEAD
82+ TASK_PARKED = 0x00000040
83+ TASK_DEAD = 0x00000080
84+ TASK_WAKEKILL = 0x00000100
85+ TASK_WAKING = 0x00000200
86+ TASK_NOLOAD = 0x00000400
87+ TASK_NEW = 0x00000800
88+ TASK_RTLOCK_WAIT = 0x00001000
89+ TASK_FREEZABLE = 0x00002000
90+ TASK_FREEZABLE_UNSAFE = 0x00004000 // 取决于: IS_ENABLED(CONFIG_LOCKDEP)
91+ TASK_FROZEN = 0x00008000
92+ TASK_STATE_MAX = 0x00010000 // 截至 Linux 内核 6.9
93+ )
94+
95+ // 任务状态映射表
96+ var taskStates = map [uint32 ]string {
97+ 0x00000000 : "R" , // "RUNNING"
98+ 0x00000001 : "S" , // "INTERRUPTIBLE"
99+ 0x00000002 : "D" , // "UNINTERRUPTIBLE"
100+ 0x00000004 : "T" , // "STOPPED"
101+ 0x00000008 : "t" , // "TRACED"
102+ 0x00000010 : "X" , // "EXIT_DEAD"
103+ 0x00000020 : "Z" , // "EXIT_ZOMBIE"
104+ 0x00000040 : "P" , // "PARKED"
105+ 0x00000080 : "dd" , // "DEAD"
106+ 0x00000100 : "wk" , // "WAKEKILL"
107+ 0x00000200 : "wg" , // "WAKING"
108+ 0x00000400 : "I" , // "NOLOAD"
109+ 0x00000800 : "N" , // "NEW"
110+ 0x00001000 : "rt" , // "RTLOCK_WAIT"
111+ 0x00002000 : "fe" , // "FREEZABLE"
112+ 0x00004000 : "fu" , // "__TASK_FREEZABLE_UNSAFE = (0x00004000 * IS_ENABLED(CONFIG_LOCKDEP))"
113+ 0x00008000 : "fo" , // "FROZEN"
114+ }
115+
116+ // GetTaskStateName 将内核任务状态位掩码转换为可读字符串
117+ func GetTaskStateName (taskState uint32 ) string {
118+ if taskState == 0 {
119+ return "R"
120+ }
121+ if taskState & TASK_NOLOAD != 0 { // 空闲内核线程等待工作
122+ return "I"
123+ }
124+
125+ var names []string
126+ for state , name := range taskStates {
127+ if taskState & state != 0 {
128+ names = append (names , name )
129+ }
130+ }
131+
132+ return strings .Join (names , "+" )
133+ }
0 commit comments