top의 출력을 ps의 시작 시간과 병합하고 싶습니다.

top의 출력을 ps의 시작 시간과 병합하고 싶습니다.

실행 중인 여러 서비스와 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) }'

관련 정보