You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求Bash脚本:识别系统启动进程并按启动顺序、CPU占用排序

可行的Bash脚本方案

我来给你梳理一个亲测有效的实现方案,核心是借助ps命令抓取进程关键信息,再通过排序参数分别满足你的两个需求。下面是完整的脚本:

#!/bin/bash

echo "=== 按进程启动顺序输出(从最早到最晚) ==="
# 提取进程ID、名称、启动时间、CPU使用率,按启动时间升序排序
ps -eo pid,comm,lstart,pcpu --sort=start_time | awk '
BEGIN{print "PID\t进程名\t\t启动时间\t\tCPU使用率(%)"} 
NR>1 {printf "%-6s %-15s %-25s %-5s\n", $1, $2, $3" "$4" "$5" "$6" "$7, $8}'

echo -e "\n=== 按CPU消耗降序输出(从高到低) ==="
# 按CPU使用率降序排序,保持相同的格式化输出
ps -eo pid,comm,lstart,pcpu --sort=-pcpu | awk '
BEGIN{print "PID\t进程名\t\t启动时间\t\tCPU使用率(%)"} 
NR>1 {printf "%-6s %-15s %-25s %-5s\n", $1, $2, $3" "$4" "$5" "$6" "$7, $8}'

关键细节说明:

  • ps -eo pid,comm,lstart,pcpu:指定输出进程ID(pid)、进程名(comm)、完整启动时间(lstart)、CPU使用率(pcpu)这几个核心字段
  • --sort=start_time:按进程启动时间升序排列,最早启动的进程排在最前面
  • --sort=-pcpu:按CPU使用率降序排列,消耗资源最多的进程排在最前面
  • awk代码块:用来重新格式化输出,替换ps默认的生硬表头,同时让各列对齐,可读性更强;NR>1是为了跳过ps自带的表头,用我们自定义的表头替代

可选优化:

如果想过滤掉内核线程(比如名称以[开头的进程),可以在ps命令后追加grep -v '^\[',示例如下:

ps -eo pid,comm,lstart,pcpu --sort=start_time | grep -v '^\[' | awk '...'

要是你需要更多进程维度的信息,还能在-eo后面添加字段,比如ppid(父进程ID)、user(运行用户)等。

内容的提问来源于stack exchange,提问作者compup

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 09:49:48