diff --git a/src/os/exec.go b/src/os/exec.go index 4ae0a9b98..2adcf3c1b 100644 --- a/src/os/exec.go +++ b/src/os/exec.go @@ -58,7 +58,7 @@ type Process struct { } func StartProcess(name string, argv []string, attr *ProcAttr) (*Process, error) { - return nil, &PathError{"fork/exec", name, ErrNotImplemented} + return nil, &PathError{Op: "fork/exec", Path: name, Err: ErrNotImplemented} } func (p *Process) Wait() (*ProcessState, error) { @@ -77,3 +77,8 @@ func Ignore(sig ...Signal) { // leave all the signals unaltered return } + +// Keep compatibility with golang and always succeed and return new proc with pid on Linux. +func FindProcess(pid int) (*Process, error) { + return findProcess(pid) +} diff --git a/src/os/exec_posix.go b/src/os/exec_posix.go index 3ccb6963b..84843a281 100644 --- a/src/os/exec_posix.go +++ b/src/os/exec_posix.go @@ -19,3 +19,8 @@ var ( Interrupt Signal = syscall.SIGINT Kill Signal = syscall.SIGKILL ) + +// Keep compatible with golang and always succeed and return new proc with pid on Linux. +func findProcess(pid int) (*Process, error) { + return &Process{Pid: pid}, nil +} diff --git a/src/os/exec_test.go b/src/os/exec_test.go new file mode 100644 index 000000000..032763abf --- /dev/null +++ b/src/os/exec_test.go @@ -0,0 +1,32 @@ +// Copyright 2024 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package os_test + +import ( + . "os" + "runtime" + "testing" +) + +func TestFindProcess(t *testing.T) { + // NOTE: For now, we only test the Linux case since only exec_posix.go is currently the only implementation. + if runtime.GOOS == "linux" { + // Linux guarantees that there is pid 0 + proc, err := FindProcess(0) + if err != nil { + t.Error("FindProcess(0): wanted err == nil, got %v:", err) + } + + if proc.Pid != 0 { + t.Error("Expected pid 0, got: ", proc.Pid) + } + + pid0 := Process{Pid: 0} + if *proc != pid0 { + t.Error("Expected &Process{Pid: 0}, got", *proc) + } + } + +}