monitor.js 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. const { fs, sys, net } = just
  2. function readStat (pid = sys.pid()) {
  3. const buf = new ArrayBuffer(4096)
  4. const path = `/proc/${pid}/stat`
  5. const fd = fs.open(path)
  6. net.seek(fd, 0, net.SEEK_SET)
  7. let bytes = net.read(fd, buf)
  8. const parts = []
  9. while (bytes > 0) {
  10. parts.push(buf.readString(bytes))
  11. bytes = net.read(fd, buf)
  12. }
  13. const fields = parts.join('').split(' ')
  14. const comm = fields[1]
  15. const state = fields[2]
  16. const [
  17. ppid,
  18. pgrp,
  19. session,
  20. ttyNr,
  21. tpgid,
  22. flags,
  23. minflt,
  24. cminflt,
  25. majflt,
  26. cmajflt,
  27. utime,
  28. stime,
  29. cutime,
  30. cstime,
  31. priority,
  32. nice,
  33. numThreads,
  34. itrealvalue,
  35. starttime,
  36. vsize,
  37. rssPages,
  38. rsslim,
  39. startcode,
  40. endcode,
  41. startstack,
  42. kstkesp,
  43. kstkeip,
  44. signal,
  45. blocked,
  46. sigignore,
  47. sigcatch,
  48. wchan,
  49. nswap,
  50. cnswap,
  51. exitSignal,
  52. processor,
  53. rtPriority,
  54. policy,
  55. delayacctBlkioTicks,
  56. guestTime,
  57. cguestTime,
  58. startData,
  59. endData,
  60. startBrk,
  61. argStart,
  62. argEnd,
  63. envStart,
  64. envEnd,
  65. exitCode
  66. ] = fields.slice(3).map(v => Number(v))
  67. net.close(fd)
  68. return {
  69. pid,
  70. comm,
  71. state,
  72. ppid,
  73. pgrp,
  74. session,
  75. ttyNr,
  76. tpgid,
  77. flags,
  78. minflt,
  79. cminflt,
  80. majflt,
  81. cmajflt,
  82. utime,
  83. stime,
  84. cutime,
  85. cstime,
  86. priority,
  87. nice,
  88. numThreads,
  89. itrealvalue,
  90. starttime,
  91. vsize,
  92. rssPages,
  93. rsslim,
  94. startcode,
  95. endcode,
  96. startstack,
  97. kstkesp,
  98. kstkeip,
  99. signal,
  100. blocked,
  101. sigignore,
  102. sigcatch,
  103. wchan,
  104. nswap,
  105. cnswap,
  106. exitSignal,
  107. processor,
  108. rtPriority,
  109. policy,
  110. delayacctBlkioTicks,
  111. guestTime,
  112. cguestTime,
  113. startData,
  114. endData,
  115. startBrk,
  116. argStart,
  117. argEnd,
  118. envStart,
  119. envEnd,
  120. exitCode
  121. }
  122. }
  123. module.exports = { readStat }