一、根据 PID 过滤进程所有信息

# Function: 根据用户输入的 PID,过滤出该 PID 所有的信息
read -p "请输入要查询的 PID: " PID
PROCESS_COUNT=$(ps -aux | awk '$2 ~ /^'"$PID"'$/ { print $11 }' | wc -l)

if [ "$PROCESS_COUNT" -eq 0 ]; then
    echo "该 PID 不存在!!"
    exit 1
fi

echo "--------------------------------"
echo "进程 PID: $PID"
echo "进程命令:$(ps -aux | awk '$2 ~ /^'"$PID"'$/ { print $11 }')"
echo "进程所属用户: $(ps -aux | awk '$2 ~ /^'"$PID"'$/ { print $1 }')"
echo "CPU 占用率:$(ps -aux | awk '$2 ~ /^'"$PID"'$/ { print $3 }' | cut -d'%' -f1)%"
echo "内存占用率:$(ps -aux | awk '$2 ~ /^'"$PID"'$/ { print $4 }' | cut -d'%' -f1)%"
echo "进程开始运行的时刻:$(ps -aux | awk '$2 ~ /^'"$PID"'$/ { print $9 }')"
echo "进程运行的时间:$(ps -aux | awk '$2 ~ /^'"$PID"'$/ { print $10 }')"
echo "进程状态:$(ps -aux | awk '$2 ~ /^'"$PID"'$/ { print $8 }')"
echo "进程虚拟内存:$(ps -aux | awk '$2 ~ /^'"$PID"'$/ { print $5 }')"
echo "进程共享内存:$(ps -aux | awk '$2 ~ /^'"$PID"'$/ { print $6 }')"
echo "--------------------------------"

二、根据进程名过滤进程信息(会显示出该进程名包含的所有线程)

# Function: 根据输入的程序的名字过滤出所对应的 PID,并显示出详细信息,如果有几个 PID,则全部显示
read -p "请输入要查询的进程名:" NAME
PROCESS_COUNT=$(ps -aux | grep "$NAME" | grep -v grep | wc -l)

# 统计进程总数
if [ "$PROCESS_COUNT" -le 0 ]; then
    echo "该进程名没有运行!"
    exit 1
fi

i=1
while [ "$PROCESS_COUNT" -gt 0 ]; do
    echo "进程 PID: $(ps -aux | grep "$NAME" | grep -v grep | awk "NR == $i { print \$2 }")"
    echo "进程命令:$(ps -aux | grep "$NAME" | grep -v grep | awk "NR == $i { print \$11 }")"
    echo "进程所属用户: $(ps -aux | grep "$NAME" | grep -v grep | awk "NR == $i { print \$1 }")"
    echo "CPU 占用率:$(ps -aux | grep "$NAME" | grep -v grep | awk "NR == $i { print \$3 }" | cut -d'%' -f1)%"
    echo "内存占用率:$(ps -aux | grep "$NAME" | grep -v grep | awk "NR == $i { print \$4 }" | cut -d'%' -f1)%"
    echo "进程开始运行的时刻:$(ps -aux | grep "$NAME" | grep -v grep | awk "NR == $i { print \$9 }")"
    echo "进程运行的时间:$(ps -aux | grep "$NAME" | grep -v grep | awk "NR == $i { print \$10 }")"
    echo "进程状态:$(ps -aux | grep "$NAME" | grep -v grep | awk "NR == $i { print \$8 }")"
    echo "进程虚拟内存:$(ps -aux | grep "$NAME" | grep -v grep | awk "NR == $i { print \$5 }")"
    echo "进程共享内存:$(ps -aux | grep "$NAME" | grep -v grep | awk "NR == $i { print \$6 }")"
    echo "‌****‌‌****‌‌****‌‌****‌‌****‌‌****‌‌****‌‌****‌‌****‌‌****‌‌****‌‌****‌‌****‌‌****‌‌****‌***"
    let PROCESS_COUNT--
    i  
done

三、根据用户名查询该用户的相关信息

优秀的 Shell 运维脚本

优秀的 Shell 运维脚本

# Function: 根据用户名查询该用户的相关信息
read -p "请输入要查询的用户名:" USERNAME

USER_INFO=$(ps -u "$USERNAME" -o pid,cmd,user,%cpu,%mem,start,time,stat,vmpeak,vsz)

if [ -z "<365>$USER_INFO" ]; then
    echo "未找到指定用户的信息!"
    exit 1
fi

echo "$USER_INFO"

以上脚本分别用于根据 PID、进程名和用户名查询相关信息。这些脚本使用了 psawk 命令来提取和格式化进程信息。

本文主题词:

常用shell运维脚本,运维shell脚本编程100例,运维shell脚本经典实例,运行shell脚本,跟老男孩学linux运维:shell编程实战,shell自动化运维,shell脚本运行环境,linux运维常用脚本,简述运行shell脚本的四种方法,shell脚本vi

点赞(43) 打赏

微信小程序

微信扫一扫体验

立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部