Skip to content

Commit b327541

Browse files
feat: Added ProcessDetails struct, getProcessDetails API
1 parent 2198573 commit b327541

File tree

1 file changed

+41
-7
lines changed

1 file changed

+41
-7
lines changed

pkg/processInfo.go

Lines changed: 41 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package psutils
22

3+
import "fmt"
4+
35
import (
46
"os"
57
"path/filepath"
@@ -12,13 +14,19 @@ type Process struct {
1214
ProcessName string
1315
}
1416

17+
type ProcessDetails struct {
18+
State string
19+
PPID int
20+
Tgid int
21+
}
22+
1523
type RealProcLoader struct{}
1624

1725
func (l *RealProcLoader) Load(filePath string) (string, error) {
1826
return loadFile(filePath)
1927
}
2028

21-
func setProcInfo(data string) (proc Process, running bool, err error) {
29+
func setProcInfo(data string) (proc Process, procDetails ProcessDetails, err error) {
2230
lines := strings.SplitN(data, "\n", -1)
2331

2432
for _, line := range lines {
@@ -36,9 +44,17 @@ func setProcInfo(data string) (proc Process, running bool, err error) {
3644

3745
parts := strings.Split(line, ":")
3846
value := strings.TrimSpace(parts[1])
39-
if strings.Contains(value, "R") {
40-
running = true
41-
}
47+
procDetails.State = value
48+
} else if strings.HasPrefix(line, "PPid") {
49+
50+
parts := strings.Split(line, ":")
51+
value := strings.TrimSpace(parts[1])
52+
procDetails.PPID, err = strconv.Atoi(value)
53+
} else if strings.HasPrefix(line, "Tgid") {
54+
55+
parts := strings.Split(line, ":")
56+
value := strings.TrimSpace(parts[1])
57+
procDetails.Tgid, err = strconv.Atoi(value)
4258
}
4359
}
4460
return
@@ -76,11 +92,29 @@ func getProcessList(loader Loader) (procs []Process, err error) {
7692
return
7793
}
7894
var process Process
79-
var running bool
80-
process, running, err = setProcInfo(data)
81-
if running {
95+
var procDetails ProcessDetails
96+
process, procDetails, err = setProcInfo(data)
97+
if strings.Contains(procDetails.State, "R") {
8298
procs = append(procs, process)
8399
}
84100
}
85101
return
86102
}
103+
104+
func GetProcessDetails(PID int) (ProcessDetails ProcessDetails, err error) {
105+
var _ Loader = (*RealProcLoader)(nil)
106+
return getProcessDetails(PID, &RealProcLoader{})
107+
}
108+
109+
func getProcessDetails(PID int, loader Loader) (ProcessDetails ProcessDetails, err error) {
110+
111+
statusFile := filepath.Join("/proc", fmt.Sprint(PID), "status")
112+
var data string
113+
data, err = loader.Load(statusFile)
114+
if err != nil {
115+
return
116+
}
117+
_, ProcessDetails, err = setProcInfo(data)
118+
119+
return
120+
}

0 commit comments

Comments
 (0)