실행 중인 여러 서비스와 top을 사용하여 현재 상태를 표시하는 bash 스크립트가 있습니다.
top -b -n1 -p `pgrep -f "proc1|proc2|proc3|proc4|proc5" |
tr '\n' ',' | # replace the newlines in the pid list with commas
sed 's/,$//g'` | # remove the trailing comma and submit to top
grep -vx '.*sed' | # From the top output: remove the entry for sed
sed 1,6d | # and remove the first 6 lines of top
생산하다
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
660 user1 20 0 5800588 658868 39384 S 0.0 4.3 0:47.72 proc1
718 user1 20 0 2089772 41068 25032 S 0.0 0.3 0:00.82 proc2
722 user1 20 0 1046316 34172 25000 S 0.0 0.2 0:02.85 proc3
725 user1 20 0 833716 23376 18404 S 0.0 0.2 0:00.21 proc4
729 user1 20 0 2369604 108084 34292 S 0.0 0.7 0:02.76 proc5
다음으로, 각 pid를 가져와서 'ps -p <pid> -o start'에 전달하고 출력을 해당 줄에 삽입하여 다음을 생성하려고 합니다.
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ STARTED COMMAND
660 user1 20 0 5800588 658868 39384 S 0.0 4.3 0:47.72 08:56:23 proc1
718 user1 20 0 2089772 41068 25032 S 0.0 0.3 0:00.82 08:56:24 proc2
722 user1 20 0 1046316 34172 25000 S 0.0 0.2 0:02.85 10:27:41 proc3
725 user1 20 0 833716 23376 18404 S 0.0 0.2 0:00.21 08:56:27 proc4
729 user1 20 0 2369604 108084 34292 S 0.0 0.7 0:02.76 08:56:29 proc5
awk를 사용하여 pid를 추출할 수 있다는 것을 알고 있지만 출력을 어떻게 병합/삽입합니까?
답변1
나는 그것에 대해 생각했다. 나는 또한 pgrep의 -d 스위치가 줄 바꿈을 쉼표로 바꾸는 것을 방지한다는 것을 발견했습니다.
echo " PID USER VIRT RES SHR %CPU %MEM TIME+ START COMMAND"
top -b -n1 -p `pgrep -d , -f "proc1|proc2|proc3|proc4|proc5"` |
sed 1,7d | # and remove the first 6 lines of top
awk 'BEGIN { OFS="\t" } { command=sprintf("ps -o stime= %s", $1); command | getline time; close(command);
printf("%7s %-10s %8s %8s %8s %5s %5s %9s %6s %s\n", $1, $2, $5, $6, $7, $9, $10, $11 , time, $12) }'