daily pastebin goal
16%
SHARE
TWEET

Untitled

a guest Nov 19th, 2017 48 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. package main
  2.  
  3. import (
  4.     "bufio"
  5.     "flag"
  6.     "fmt"
  7.     "log"
  8.     "os"
  9.     "sort"
  10.     "strconv"
  11.     "strings"
  12. )
  13.  
  14. func main() {
  15.     flag.Parse()
  16.     if err := run(); err != nil {
  17.         log.Fatal(err)
  18.     }
  19. }
  20.  
  21. func run() error {
  22.     pid, err := strconv.Atoi(flag.Arg(0))
  23.     if err != nil {
  24.         return err
  25.     }
  26.     smaps, err := getMaps(pid)
  27.     if err != nil {
  28.         return err
  29.     }
  30.     sorted := keys(smaps)
  31.     for _, k := range sorted {
  32.         fmt.Printf("%s %d\n", k, smaps[k])
  33.     }
  34.     return nil
  35. }
  36.  
  37. func getMaps(pid int) (map[string]int, error) {
  38.     f, err := os.Open(fmt.Sprintf("/proc/%d/smaps", pid))
  39.     if err != nil {
  40.         return nil, err
  41.     }
  42.     defer f.Close()
  43.     var (
  44.         smaps = make(map[string]int)
  45.         s     = bufio.NewScanner(f)
  46.     )
  47.     for s.Scan() {
  48.         var (
  49.             fields = strings.Fields(s.Text())
  50.             name   = fields[0]
  51.         )
  52.         if len(fields) < 2 {
  53.             continue
  54.         }
  55.         n, err := strconv.Atoi(fields[1])
  56.         if err != nil {
  57.             continue
  58.         }
  59.         smaps[name] += n
  60.     }
  61.     if err := s.Err(); err != nil {
  62.         return nil, err
  63.     }
  64.     return smaps, nil
  65. }
  66.  
  67. func keys(smaps map[string]int) []string {
  68.     var o []string
  69.     for k := range smaps {
  70.         o = append(o, k)
  71.     }
  72.     sort.Strings(o)
  73.     return o
  74. }
RAW Paste Data
Top