Skip to content

Commit 2f99176

Browse files
committed
[process][posix]: fix getTerminalMap path construction bug
1 parent ace8dae commit 2f99176

2 files changed

Lines changed: 27 additions & 13 deletions

File tree

process/process_posix.go

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,9 @@ func getTerminalMap() (map[uint64]string, error) {
2626
ret := make(map[uint64]string)
2727
var termfiles []string
2828

29-
d, err := os.Open("/dev")
29+
devPath := common.HostDev()
30+
31+
d, err := os.Open(devPath)
3032
if err != nil {
3133
return nil, err
3234
}
@@ -37,32 +39,29 @@ func getTerminalMap() (map[uint64]string, error) {
3739
return nil, err
3840
}
3941
for _, devname := range devnames {
40-
if strings.HasPrefix(devname, "/dev/tty") {
41-
termfiles = append(termfiles, "/dev/tty/"+devname)
42+
if strings.HasPrefix(devname, "tty") {
43+
termfiles = append(termfiles, filepath.Join(devPath, devname))
4244
}
4345
}
4446

4547
var ptsnames []string
46-
ptsd, err := os.Open("/dev/pts")
48+
ptsPath := filepath.Join(devPath, "pts")
49+
ptsd, err := os.Open(ptsPath)
4750
if err != nil {
48-
ptsnames, _ = filepath.Glob("/dev/ttyp*")
51+
ptsnames, _ = filepath.Glob(filepath.Join(devPath, "ttyp*"))
4952
if ptsnames == nil {
5053
return nil, err
5154
}
52-
}
53-
defer ptsd.Close()
54-
55-
if ptsnames == nil {
55+
termfiles = append(termfiles, ptsnames...)
56+
} else {
5657
defer ptsd.Close()
5758
ptsnames, err = ptsd.Readdirnames(-1)
5859
if err != nil {
5960
return nil, err
6061
}
6162
for _, ptsname := range ptsnames {
62-
termfiles = append(termfiles, "/dev/pts/"+ptsname)
63+
termfiles = append(termfiles, filepath.Join(ptsPath, ptsname))
6364
}
64-
} else {
65-
termfiles = ptsnames
6665
}
6766

6867
for _, name := range termfiles {
@@ -72,7 +71,7 @@ func getTerminalMap() (map[uint64]string, error) {
7271
return nil, err
7372
}
7473
rdev := uint64(stat.Rdev)
75-
ret[rdev] = strings.ReplaceAll(name, "/dev", "")
74+
ret[rdev] = strings.TrimPrefix(name, devPath+string(os.PathSeparator))
7675
}
7776
return ret, nil
7877
}

process/process_posix_test.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ import (
99

1010
"github.com/stretchr/testify/assert"
1111
"golang.org/x/sys/unix"
12+
13+
"github.com/shirou/gopsutil/v4/internal/common"
1214
)
1315

1416
func Test_SendSignal(t *testing.T) {
@@ -17,3 +19,16 @@ func Test_SendSignal(t *testing.T) {
1719
p, _ := NewProcess(int32(checkPid))
1820
assert.NoErrorf(t, p.SendSignal(unix.SIGCONT), "send signal")
1921
}
22+
23+
func TestGetTerminalMapPathsExist(t *testing.T) {
24+
termmap, err := getTerminalMap()
25+
if err != nil {
26+
t.Skipf("getTerminalMap not available: %v", err)
27+
}
28+
29+
for _, name := range termmap {
30+
fullPath := common.HostDev(name)
31+
_, err := os.Stat(fullPath)
32+
assert.NoErrorf(t, err, "terminal device should exist: %s", fullPath)
33+
}
34+
}

0 commit comments

Comments
 (0)