Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/awk -f
- function add_info(INFO, pid, COL, file, line, A, sclose, HDR, add) {
- COL[1] = pid
- COL[2] = "-" # name
- COL["n"] = 2
- if (!("hasheader" in INFO)) {
- HDR[1] = "PID"
- HDR[2] = "Name"
- HDR["n"] = 2
- }
- file = "/proc/" pid "/status"
- while ((getline line <file) > 0) {
- sclose = 1
- split(line, A)
- if (A[1] == "Name:") COL[2] = A[2]
- if (!match(A[1], "^Vm[^:]*")) continue
- if (!("hasheader" in INFO))
- HDR[++HDR["n"]] = substr(A[1], 3, RLENGTH-2)
- COL[++COL["n"]] = A[2]
- # ignore unexistant and kernel process:
- add = 1
- }
- if (sclose) close(file)
- if (!("hasheader" in INFO)) {
- add_row(INFO, HDR)
- INFO["hasheader"] = 1
- }
- if (add) add_row(INFO, COL)
- }
- function add_row(INFO, COL, r, i) {
- r = ++INFO["rows"]
- for (i = 1; i <= COL["n"]; i++) INFO[r, i] = COL[i]
- if (INFO["cols"] < COL["n"])
- INFO["cols"] = COL["n"]
- }
- function print_info(INFO, c, r, W, w) {
- for (c = 1; c <= INFO["cols"]; c++) {
- W[c] = 0
- for (r = 1; r <= INFO["rows"]; r++) {
- w = length(INFO[r, c])
- if (w > W[c]) W[c] = w
- }
- }
- for (r = 1; r <= INFO["rows"]; r++) {
- for (c = 1; c <= INFO["cols"]; c++)
- printf("%-" W[c] "s ", INFO[r, c])
- print ""
- }
- }
- function heapsort(ARR, end, start) {
- end = ARR["n"]
- start = int(end / 2)
- while (start > 0)
- siftdown(ARR, start--, end)
- while (end > 1) {
- swap(ARR, end, 1)
- siftdown(ARR, 1, --end)
- }
- }
- function swap(ARR, i, j, t) {
- t = ARR[i]
- ARR[i] = ARR[j]
- ARR[j] = t
- }
- function siftdown(ARR, root, end, child) {
- while (root * 2 <= end) {
- child = root * 2
- if (child + 1 <= end && ARR[child] < ARR[child+1])
- child++
- if (ARR[root] < ARR[child]) {
- swap(ARR, root, child)
- root = child
- } else
- return
- }
- }
- BEGIN {
- PROCS["n"] = 0
- cmd = "ls /proc"
- while ((cmd | getline) > 0) {
- if (!/^[0-9]+$/) continue
- PROCS[++PROCS["n"]] = 0 + $0
- }
- close(cmd)
- heapsort(PROCS)
- for (n = 1; n <= PROCS["n"]; n++)
- add_info(INFO, PROCS[n])
- print_info(INFO)
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement