...

Source file src/github.com/shirou/gopsutil/host/host_bsd.go

Documentation: github.com/shirou/gopsutil/host

     1  // +build darwin freebsd openbsd
     2  
     3  package host
     4  
     5  import (
     6  	"context"
     7  	"sync/atomic"
     8  
     9  	"golang.org/x/sys/unix"
    10  )
    11  
    12  // cachedBootTime must be accessed via atomic.Load/StoreUint64
    13  var cachedBootTime uint64
    14  
    15  func BootTimeWithContext(ctx context.Context) (uint64, error) {
    16  	t := atomic.LoadUint64(&cachedBootTime)
    17  	if t != 0 {
    18  		return t, nil
    19  	}
    20  	tv, err := unix.SysctlTimeval("kern.boottime")
    21  	if err != nil {
    22  		return 0, err
    23  	}
    24  
    25  	atomic.StoreUint64(&cachedBootTime, uint64(tv.Sec))
    26  
    27  	return uint64(tv.Sec), nil
    28  }
    29  
    30  func UptimeWithContext(ctx context.Context) (uint64, error) {
    31  	boot, err := BootTimeWithContext(ctx)
    32  	if err != nil {
    33  		return 0, err
    34  	}
    35  	return timeSince(boot), nil
    36  }
    37  

View as plain text