in providers/darwin/process_darwin.go [93:124]
func (p *process) Info() (types.ProcessInfo, error) {
if p.info != nil {
return *p.info, nil
}
var task procTaskAllInfo
if err := getProcTaskAllInfo(p.pid, &task); err != nil && err != types.ErrNotImplemented {
return types.ProcessInfo{}, err
}
var vnode procVnodePathInfo
if err := getProcVnodePathInfo(p.pid, &vnode); err != nil && err != types.ErrNotImplemented {
return types.ProcessInfo{}, err
}
if err := kern_procargs(p.pid, p); err != nil {
return types.ProcessInfo{}, err
}
p.info = &types.ProcessInfo{
Name: int8SliceToString(task.Pbsd.Pbi_name[:]),
PID: p.pid,
PPID: int(task.Pbsd.Pbi_ppid),
CWD: int8SliceToString(vnode.Cdir.Path[:]),
Exe: p.exe,
Args: p.args,
StartTime: time.Unix(int64(task.Pbsd.Pbi_start_tvsec),
int64(task.Pbsd.Pbi_start_tvusec)*int64(time.Microsecond)),
}
return *p.info, nil
}