in sigar_aix.go [354:405]
func (self *ProcState) Get(pid int) error {
info := C.struct_procsinfo64{}
cpid := C.pid_t(pid)
num, err := C.getprocs(unsafe.Pointer(&info), C.sizeof_struct_procsinfo64, nil, 0, &cpid, 1)
if err != nil {
return err
}
if num != 1 {
return syscall.ESRCH
}
self.Name = C.GoString(&info.pi_comm[0])
self.Ppid = int(info.pi_ppid)
self.Pgid = int(info.pi_pgrp)
self.Nice = int(info.pi_nice)
self.Tty = int(info.pi_ttyd)
self.Priority = int(info.pi_pri)
switch info.pi_state {
case C.SACTIVE:
self.State = RunStateRun
case C.SIDL:
self.State = RunStateIdle
case C.SSTOP:
self.State = RunStateStop
case C.SZOMB:
self.State = RunStateZombie
case C.SSWAP:
self.State = RunStateSleep
default:
self.State = RunStateUnknown
}
// Get process username. Fallback to UID if username is not available.
uid := strconv.Itoa(int(info.pi_uid))
userID, err := user.LookupId(uid)
if err == nil && userID.Username != "" {
self.Username = userID.Username
} else {
self.Username = uid
}
thrinfo := C.struct_thrdsinfo64{}
tid := C.tid_t(0)
if _, err := C.getthrds(cpid, unsafe.Pointer(&thrinfo), C.sizeof_struct_thrdsinfo64, &tid, 1); err != nil {
self.Processor = int(thrinfo.ti_affinity)
}
return nil
}