Guest User

Untitled

a guest
Nov 19th, 2017
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.06 KB | None | 0 0
  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. }
Add Comment
Please, Sign In to add comment