func TestSysctlRaw(t *testing.T) { if runtime.GOOS == "openbsd" { t.Skip("kern.proc.pid does not exist on OpenBSD") } _, err := unix.SysctlRaw("kern.proc.pid", unix.Getpid()) if err != nil { t.Fatal(err) } }
func getCPUTimes() ([]cputime, error) { const states = 5 clockb, err := unix.SysctlRaw("kern.clockrate") if err != nil { return nil, err } clock := *(*clockinfo)(unsafe.Pointer(&clockb[0])) cpb, err := unix.SysctlRaw("kern.cp_times") if err != nil { return nil, err } var cpufreq float64 if clock.stathz > 0 { cpufreq = float64(clock.stathz) } else { cpufreq = float64(clock.hz) } var times []float64 for len(cpb) >= int(unsafe.Sizeof(int(0))) { t := *(*int)(unsafe.Pointer(&cpb[0])) times = append(times, float64(t)/cpufreq) cpb = cpb[unsafe.Sizeof(int(0)):] } cpus := make([]cputime, len(times)/states) for i := 0; i < len(times); i += states { cpu := &cpus[i/states] cpu.user = times[i] cpu.nice = times[i+1] cpu.sys = times[i+2] cpu.intr = times[i+3] cpu.idle = times[i+4] } return cpus, nil }
func getLoad() ([]float64, error) { type loadavg struct { load [3]uint32 scale int } b, err := unix.SysctlRaw("vm.loadavg") if err != nil { return nil, err } load := *(*loadavg)(unsafe.Pointer((&b[0]))) scale := float64(load.scale) return []float64{ float64(load.load[0]) / scale, float64(load.load[1]) / scale, float64(load.load[2]) / scale, }, nil }
func TestSysctlRaw(t *testing.T) { _, err := unix.SysctlRaw("kern.proc.pid", unix.Getpid()) if err != nil { t.Fatal(err) } }