Skip to content

Commit 0b4d681

Browse files
authored
Merge pull request #1488 from Lomanic/issue1485
[process][posix] Realign process.Name() with python psutil to return same value on python3 scripts processes
2 parents c43eaea + 8b96d2e commit 0b4d681

File tree

5 files changed

+57
-62
lines changed

5 files changed

+57
-62
lines changed

process/process_darwin.go

-2
Original file line numberDiff line numberDiff line change
@@ -82,8 +82,6 @@ func (p *Process) NameWithContext(ctx context.Context) (string, error) {
8282
extendedName := filepath.Base(cmdName)
8383
if strings.HasPrefix(extendedName, p.name) {
8484
name = extendedName
85-
} else {
86-
name = cmdName
8785
}
8886
}
8987
}

process/process_freebsd.go

-2
Original file line numberDiff line numberDiff line change
@@ -55,8 +55,6 @@ func (p *Process) NameWithContext(ctx context.Context) (string, error) {
5555
extendedName := filepath.Base(cmdlineSlice[0])
5656
if strings.HasPrefix(extendedName, p.name) {
5757
name = extendedName
58-
} else {
59-
name = cmdlineSlice[0]
6058
}
6159
}
6260
}

process/process_linux.go

-2
Original file line numberDiff line numberDiff line change
@@ -845,8 +845,6 @@ func (p *Process) fillFromStatusWithContext(ctx context.Context) error {
845845
extendedName := filepath.Base(cmdlineSlice[0])
846846
if strings.HasPrefix(extendedName, p.name) {
847847
p.name = extendedName
848-
} else {
849-
p.name = cmdlineSlice[0]
850848
}
851849
}
852850
}

process/process_openbsd.go

-2
Original file line numberDiff line numberDiff line change
@@ -60,8 +60,6 @@ func (p *Process) NameWithContext(ctx context.Context) (string, error) {
6060
extendedName := filepath.Base(cmdlineSlice[0])
6161
if strings.HasPrefix(extendedName, p.name) {
6262
name = extendedName
63-
} else {
64-
name = cmdlineSlice[0]
6563
}
6664
}
6765
}

process/process_test.go

+57-54
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package process
22

33
import (
4+
"bufio"
45
"errors"
56
"fmt"
67
"io/ioutil"
@@ -391,6 +392,62 @@ func Test_Process_Long_Name(t *testing.T) {
391392
cmd.Process.Kill()
392393
}
393394

395+
func Test_Process_Name_Against_Python(t *testing.T) {
396+
if runtime.GOOS == "windows" {
397+
t.Skip("only applies to posix")
398+
}
399+
py3Path, err := exec.LookPath("python3")
400+
if err != nil {
401+
t.Skipf("python3 not found: %s", err)
402+
}
403+
if out, err := exec.Command(py3Path, "-c", "import psutil").CombinedOutput(); err != nil {
404+
t.Skipf("psutil not found for %s: %s", py3Path, out)
405+
}
406+
407+
tmpdir, err := ioutil.TempDir("", "")
408+
if err != nil {
409+
t.Fatalf("unable to create temp dir %v", err)
410+
}
411+
defer os.RemoveAll(tmpdir) // clean up
412+
tmpfilepath := filepath.Join(tmpdir, "looooooooooooooooooooong.py")
413+
tmpfile, err := os.Create(tmpfilepath)
414+
if err != nil {
415+
t.Fatalf("unable to create temp file %v", err)
416+
}
417+
tmpfilecontent := []byte("#!" + py3Path + "\nimport psutil, time\nprint(psutil.Process().name(), flush=True)\nwhile True:\n\ttime.sleep(1)")
418+
if _, err := tmpfile.Write(tmpfilecontent); err != nil {
419+
tmpfile.Close()
420+
t.Fatalf("unable to write temp file %v", err)
421+
}
422+
if err := tmpfile.Chmod(0o744); err != nil {
423+
t.Fatalf("unable to chmod u+x temp file %v", err)
424+
}
425+
if err := tmpfile.Close(); err != nil {
426+
t.Fatalf("unable to close temp file %v", err)
427+
}
428+
cmd := exec.Command(tmpfilepath)
429+
outPipe, _ := cmd.StdoutPipe()
430+
scanner := bufio.NewScanner(outPipe)
431+
cmd.Start()
432+
defer cmd.Process.Kill()
433+
scanner.Scan()
434+
pyName := scanner.Text() // first line printed by py3 script, its name
435+
t.Logf("pyName %s", pyName)
436+
p, err := NewProcess(int32(cmd.Process.Pid))
437+
skipIfNotImplementedErr(t, err)
438+
if err != nil {
439+
t.Fatalf("getting process error %v", err)
440+
}
441+
name, err := p.Name()
442+
skipIfNotImplementedErr(t, err)
443+
if err != nil {
444+
t.Fatalf("getting name error %v", err)
445+
}
446+
if pyName != name {
447+
t.Fatalf("psutil and gopsutil process.Name() results differ: expected %s, got %s", pyName, name)
448+
}
449+
}
450+
394451
func Test_Process_Exe(t *testing.T) {
395452
p := testGetProcess()
396453

@@ -785,60 +842,6 @@ func Test_Process_Cwd(t *testing.T) {
785842
t.Log(pidCwd)
786843
}
787844

788-
func Test_AllProcesses_cmdLine(t *testing.T) {
789-
procs, err := Processes()
790-
skipIfNotImplementedErr(t, err)
791-
if err != nil {
792-
t.Fatalf("getting processes error %v", err)
793-
}
794-
for _, proc := range procs {
795-
var exeName string
796-
var cmdLine string
797-
798-
exeName, _ = proc.Exe()
799-
cmdLine, err = proc.Cmdline()
800-
if err != nil {
801-
cmdLine = "Error: " + err.Error()
802-
}
803-
804-
t.Logf("Process #%v: Name: %v / CmdLine: %v\n", proc.Pid, exeName, cmdLine)
805-
}
806-
}
807-
808-
func Test_AllProcesses_environ(t *testing.T) {
809-
procs, err := Processes()
810-
skipIfNotImplementedErr(t, err)
811-
if err != nil {
812-
t.Fatalf("getting processes error %v", err)
813-
}
814-
for _, proc := range procs {
815-
exeName, _ := proc.Exe()
816-
environ, err := proc.Environ()
817-
if err != nil {
818-
environ = []string{"Error: " + err.Error()}
819-
}
820-
821-
t.Logf("Process #%v: Name: %v / Environment Variables: %v\n", proc.Pid, exeName, environ)
822-
}
823-
}
824-
825-
func Test_AllProcesses_Cwd(t *testing.T) {
826-
procs, err := Processes()
827-
skipIfNotImplementedErr(t, err)
828-
if err != nil {
829-
t.Fatalf("getting processes error %v", err)
830-
}
831-
for _, proc := range procs {
832-
exeName, _ := proc.Exe()
833-
cwd, err := proc.Cwd()
834-
if err != nil {
835-
cwd = "Error: " + err.Error()
836-
}
837-
838-
t.Logf("Process #%v: Name: %v / Current Working Directory: %s\n", proc.Pid, exeName, cwd)
839-
}
840-
}
841-
842845
func BenchmarkNewProcess(b *testing.B) {
843846
checkPid := os.Getpid()
844847
for i := 0; i < b.N; i++ {

0 commit comments

Comments
 (0)