[process][solaris] improve Exe portability

Resolving from path/a.out seems more portable than from execname.
pull/1075/head
Ville Skyttä 4 years ago
parent 3af73eac22
commit f43138a3ff

@ -66,7 +66,11 @@ func (p *Process) TgidWithContext(ctx context.Context) (int32, error) {
} }
func (p *Process) ExeWithContext(ctx context.Context) (string, error) { func (p *Process) ExeWithContext(ctx context.Context) (string, error) {
return p.fillFromExecnameWithContext(ctx) exe, err := p.fillFromPathAOutWithContext(ctx)
if os.IsNotExist(err) {
exe, err = p.fillFromExecnameWithContext(ctx)
}
return exe, err
} }
func (p *Process) CmdlineWithContext(ctx context.Context) (string, error) { func (p *Process) CmdlineWithContext(ctx context.Context) (string, error) {
@ -220,6 +224,16 @@ func (p *Process) fillFromPathCwdWithContext(ctx context.Context) (string, error
return cwd, nil return cwd, nil
} }
func (p *Process) fillFromPathAOutWithContext(ctx context.Context) (string, error) {
pid := p.Pid
cwdPath := common.HostProc(strconv.Itoa(int(pid)), "path", "a.out")
exe, err := os.Readlink(cwdPath)
if err != nil {
return "", err
}
return exe, nil
}
func (p *Process) fillFromExecnameWithContext(ctx context.Context) (string, error) { func (p *Process) fillFromExecnameWithContext(ctx context.Context) (string, error) {
pid := p.Pid pid := p.Pid
execNamePath := common.HostProc(strconv.Itoa(int(pid)), "execname") execNamePath := common.HostProc(strconv.Itoa(int(pid)), "execname")

@ -66,7 +66,11 @@ func (p *Process) TgidWithContext(ctx context.Context) (int32, error) {
} }
func (p *Process) ExeWithContext(ctx context.Context) (string, error) { func (p *Process) ExeWithContext(ctx context.Context) (string, error) {
return p.fillFromExecnameWithContext(ctx) exe, err := p.fillFromPathAOutWithContext(ctx)
if os.IsNotExist(err) {
exe, err = p.fillFromExecnameWithContext(ctx)
}
return exe, err
} }
func (p *Process) CmdlineWithContext(ctx context.Context) (string, error) { func (p *Process) CmdlineWithContext(ctx context.Context) (string, error) {
@ -216,6 +220,16 @@ func (p *Process) fillFromPathCwdWithContext(ctx context.Context) (string, error
return cwd, nil return cwd, nil
} }
func (p *Process) fillFromPathAOutWithContext(ctx context.Context) (string, error) {
pid := p.Pid
cwdPath := common.HostProc(strconv.Itoa(int(pid)), "path", "a.out")
exe, err := os.Readlink(cwdPath)
if err != nil {
return "", err
}
return exe, nil
}
func (p *Process) fillFromExecnameWithContext(ctx context.Context) (string, error) { func (p *Process) fillFromExecnameWithContext(ctx context.Context) (string, error) {
pid := p.Pid pid := p.Pid
execNamePath := common.HostProc(strconv.Itoa(int(pid)), "execname") execNamePath := common.HostProc(strconv.Itoa(int(pid)), "execname")

Loading…
Cancel
Save