func()

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
}