求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
相关产品推荐
相关产品推荐

