in providers/linux/process_linux.go [110:151]
func (p *process) Info() (types.ProcessInfo, error) {
if p.info != nil {
return *p.info, nil
}
stat, err := p.Stat()
if err != nil {
return types.ProcessInfo{}, fmt.Errorf("error fetching process stats: %w", err)
}
exe, err := p.Executable()
if err != nil {
return types.ProcessInfo{}, fmt.Errorf("error fetching process executable info: %w", err)
}
args, err := p.CmdLine()
if err != nil {
return types.ProcessInfo{}, fmt.Errorf("error fetching process cmdline: %w", err)
}
cwd, err := p.CWD()
if err != nil {
return types.ProcessInfo{}, fmt.Errorf("error fetching process CWD: %w", err)
}
bootTime, err := bootTime(p.fs.FS)
if err != nil {
return types.ProcessInfo{}, fmt.Errorf("error fetching boot time: %w", err)
}
p.info = &types.ProcessInfo{
Name: stat.Comm,
PID: p.PID(),
PPID: stat.PPID,
CWD: cwd,
Exe: exe,
Args: args,
StartTime: bootTime.Add(ticksToDuration(stat.Starttime)),
}
return *p.info, nil
}