我想将 top 的输出与 ps 的开始时间合并

我想将 top 的输出与 ps 的开始时间合并

我有几个正在运行的服务和一个 bash 脚本,该脚本使用 top 例如显示它们的当前状态

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) }'

相关内容