sysutil_linux.go 534 B

12345678910111213141516171819202122232425262728293031323334
  1. // +build linux
  2. package sysutil
  3. import (
  4. "bytes"
  5. "io/ioutil"
  6. "strconv"
  7. "time"
  8. )
  9. var (
  10. btimePrefix = []byte("btime ")
  11. lineEnd = []byte("\n")
  12. )
  13. func init() {
  14. buf, err := ioutil.ReadFile("/proc/stat")
  15. if err != nil {
  16. btime = time.Now()
  17. return
  18. }
  19. for _, line := range bytes.SplitN(buf, lineEnd, -1) {
  20. if bytes.HasPrefix(line, btimePrefix) {
  21. t, err := strconv.ParseInt(string(line[len(btimePrefix):]), 10, 64)
  22. if err != nil {
  23. btime = time.Now()
  24. return
  25. }
  26. btime = time.Unix(t, 0)
  27. break
  28. }
  29. }
  30. }