在Linux系统中,进程优先级通过nice值和实时优先级控制,普通进程调整nice值即可实现优先级高低调整,nice值越小,进程优先级越高(范围-20~`19,默认0`);root用户可设置负nice值,普通用户仅能设置≥当前nice值的正数。
-20(最高优先级) → 0(默认) → 19(最低优先级)1~`99`),需root权限,一般用于对延迟敏感的场景(如工业控制),非必要不使用。用nice命令启动进程,直接指定nice值,语法:
# 格式:nice -n [nice值] 进程命令
nice -n -5 python test.py # root用户,设置nice=-5(提高优先级)
nice -n 10 ./start.sh # 普通/root用户,设置nice=10(降低优先级)nice -5 python test.py 等价于 nice -n -5 python test.py(负数值可省略n)。用renice命令修改已运行进程的nice值,需指定PID(进程ID),语法:
ps -ef | grep 进程名 # 模糊查询,如ps -ef | grep python
pgrep 进程名 # 精准查询PID,如pgrep python
top # 实时查看进程PID和当前nice值(NI列)# 格式:renice [nice值] -p [PID]
renice -5 -p 12345 # root用户,将PID=12345的进程nice值设为-5(提高优先级)
renice 8 -p 67890 # 所有用户,将PID=67890的进程nice值设为8(降低优先级)
# 批量调整:给同一用户的所有进程设优先级
renice -3 -u root # root用户,将root所有进程nice值设为-3ps -o pid,ni,cmd -p 12345 # 查看指定PID的nice值(NI列)
top -p 12345 # 实时验证(NI列显示调整后的值)top进入实时进程监控界面-5),回车即可完成调整实时进程优先级远高于普通进程(包括系统进程),滥用会导致系统无响应,仅适用于对延迟要求极高的场景,需root权限:
chrt -f 50 python test.py # -f表示FIFO调度策略,50为实时优先级(1~99)chrt -f -p 60 12345 # 将PID=12345的进程设为FIFO策略,实时优先级60chrt -o -p 0 12345 # -o表示普通调度策略,恢复为默认nice=0renice -5 -p 12345会报错,需切换root(sudo -i)后操作。-20可能抢占系统核心进程资源,导致系统卡顿。nice启动的父进程,其创建的子进程会继承父进程的nice值。# 查找python进程的PID并设为nice=-3(root)
renice -3 -p $(pgrep python)ps -eo pid,ni,cmd | awk '$2 <= -5'这个脚本专为批量调整指定进程名的nice值设计,支持root/普通用户(自动做权限校验)、批量PID匹配、调整后结果验证,还会做安全校验(避免误改系统核心进程),开箱即用,适配所有主流Linux发行版(CentOS/Ubuntu/Debian等)。
systemd/kernel/sshd等),避免误改导致系统异常python会匹配所有python相关进程)新建脚本文件(如batch_nice.sh),复制以下内容,保存后赋予执行权限即可使用:
#!/bin/bash
# 脚本名称:Linux进程优先级批量调整脚本
# 适用场景:批量调整指定进程名的nice值,支持root/普通用户,带安全校验和结果验证
# 使用方式:sudo bash batch_nice.sh (root权限)或 bash batch_nice.sh (普通用户)
set -euo pipefail
# ===================== 配置区(可根据需要修改)=====================
# 系统核心进程,禁止调整(模糊匹配),避免误改导致系统异常
FORBIDDEN_PROCS=("systemd""kernel""sshd""bash""sh""top""ps""renice""sudo")
# nice值合法范围
NICE_MIN=-20
NICE_MAX=19
# ======================================================================
# 颜色输出函数(增强交互性)
red_echo() { echo -e "\033[31m$1\033[0m"; }
green_echo() { echo -e "\033[32m$1\033[0m"; }
yellow_echo() { echo -e "\033[33m$1\033[0m"; }
blue_echo() { echo -e "\033[34m$1\033[0m"; }
# 脚本欢迎信息
echo"==================== Linux进程优先级批量调整工具 ===================="
echo"说明:1. nice值越小优先级越高,范围[$NICE_MIN, $NICE_MAX],默认0"
echo" 2. 普通用户仅能设置≥0的nice值,root用户可设置全范围"
echo" 3. 系统核心进程已被禁止调整,避免误操作"
echo"======================================================================"
echo
# 第一步:获取用户输入(进程名+目标nice值)
read -p "请输入要调整的进程名(支持模糊匹配,如python):" TARGET_PROC
if [[ -z "$TARGET_PROC" ]]; then
red_echo "错误:进程名不能为空!"
exit 1
fi
read -p "请输入目标nice值[$NICE_MIN, $NICE_MAX]:" TARGET_NICE
# 校验nice值是否为整数
if ! [[ "$TARGET_NICE" =~ ^-?[0-9]+$ ]]; then
red_echo "错误:nice值必须是整数!"
exit 1
fi
# 校验nice值是否在合法范围
if [[ "$TARGET_NICE" -lt "$NICE_MIN" || "$TARGET_NICE" -gt "$NICE_MAX" ]]; then
red_echo "错误:nice值必须在[$NICE_MIN, $NICE_MAX]范围内!"
exit 1
fi
# 第二步:权限校验+普通用户限制
USER_ID=$(id -u)
if [[ "$USER_ID" -eq 0 ]]; then
blue_echo "当前为ROOT用户,可设置[$NICE_MIN, $NICE_MAX]全范围nice值"
else
blue_echo "当前为普通用户,仅能设置≥0的nice值"
# 普通用户禁止设置负nice值
if [[ "$TARGET_NICE" -lt 0 ]]; then
red_echo "错误:普通用户无权限设置负nice值,请切换root(sudo -i)后操作!"
exit 1
fi
fi
echo
# 第三步:查询匹配的进程PID,并过滤禁止调整的进程+去重
blue_echo "正在查询匹配进程[$TARGET_PROC],并过滤系统核心进程..."
# 查询进程:PID、原nice值、进程命令,排除当前脚本进程,去重
RAW_PIDS=$(ps -eo pid,ni,cmd --no-headers | grep -i "$TARGET_PROC" | grep -v "batch_nice.sh" | grep -v "grep")
if [[ -z "$RAW_PIDS" ]]; then
red_echo "未找到匹配进程[$TARGET_PROC],脚本退出!"
exit 0
fi
# 过滤禁止调整的进程,提取有效PID和原nice值
VALID_PROCS=()
whileread -r PID NI CMD; do
# 跳过空PID
if [[ -z "$PID" ]]; thencontinue; fi
# 跳过系统核心进程
FORBIDDEN=0
for proc in"${FORBIDDEN_PROCS[@]}"; do
if [[ "$CMD" =~ $proc ]]; then
FORBIDDEN=1
break
fi
done
if [[ "$FORBIDDEN" -eq 1 ]]; then
yellow_echo "跳过系统核心进程:PID=$PID,CMD=$CMD"
continue
fi
# 跳过已为目标nice值的进程
if [[ "$NI" -eq "$TARGET_NICE" ]]; then
yellow_echo "跳过无需调整进程:PID=$PID(当前nice=$NI,目标nice=$TARGET_NICE)"
continue
fi
# 加入有效进程列表
VALID_PROCS+=("$PID$NI$CMD")
done <<< "$RAW_PIDS"
# 检查是否有有效进程需要调整
if [[ ${#VALID_PROCS[@]} -eq 0 ]]; then
green_echo "无需要调整的进程,脚本执行完成!"
exit 0
fi
# 第四步:展示待调整进程,确认后执行
echo
blue_echo "========== 以下为待调整的有效进程(共${#VALID_PROCS[@]}个)=========="
printf"%-8s %-8s %s\n""PID""原NICE值""进程命令"
for proc in"${VALID_PROCS[@]}"; do
printf"%-8s %-8s %s\n"$proc
done
echo
read -p "确认是否调整以上进程的nice值为$TARGET_NICE?(y/n,默认n):" CONFIRM
if [[ "$CONFIRM" != "y" && "$CONFIRM" != "Y" ]]; then
red_echo "用户取消操作,脚本退出!"
exit 0
fi
# 第五步:批量调整nice值
echo
blue_echo "开始批量调整进程优先级,目标nice值=$TARGET_NICE..."
for proc in"${VALID_PROCS[@]}"; do
PID=$(echo"$proc" | awk '{print $1}')
# 执行renice调整,忽略已无权限/进程已退出的情况
if renice "$TARGET_NICE" -p "$PID" >/dev/null 2>&1; then
green_echo "成功调整:PID=$PID → nice值=$TARGET_NICE"
else
red_echo "调整失败:PID=$PID(进程已退出/无权限)"
fi
done
# 第六步:验证调整结果并展示
echo
blue_echo "========== 调整结果验证 =========="
printf"%-8s %-8s %-8s %s\n""PID""原NICE值""新NICE值""进程命令"
for proc in"${VALID_PROCS[@]}"; do
PID=$(echo"$proc" | awk '{print $1}')
OLD_NI=$(echo"$proc" | awk '{print $2}')
CMD=$(echo"$proc" | awk '{$1=$2=""; print substr($0,3)}')
# 查询调整后的实际nice值
NEW_NI=$(ps -o ni --no-headers -p "$PID" 2>/dev/null || echo"进程已退出")
printf"%-8s %-8s %-8s %s\n""$PID""$OLD_NI""$NEW_NI""$CMD"
done
# 脚本结束
echo
green_echo "==================== 脚本执行完成!===================="
yellow_echo "注意:1. 优先级仅影响CPU调度,IO型卡顿调整无效果;2. 不要将进程设为-20避免抢占系统资源。"# 新建脚本文件
vim batch_nice.sh
# 复制上面的完整代码,粘贴后保存退出(vim中按ESC,输入:wq回车)chmod +x batch_nice.shbash batch_nice.sh# 直接root执行
sudo bash batch_nice.sh
# 或先切root再执行
sudo -i
bash /你的脚本路径/batch_nice.sh==================== Linux进程优先级批量调整工具 ====================
说明:1. nice值越小优先级越高,范围[-20, 19],默认0
2. 普通用户仅能设置≥0的nice值,root用户可设置全范围
3. 系统核心进程已被禁止调整,避免误操作
======================================================================
请输入要调整的进程名(支持模糊匹配,如python):python
请输入目标nice值[-20, 19]:-5
当前为ROOT用户,可设置[-20, 19]全范围nice值
正在查询匹配进程[python],并过滤系统核心进程...
========== 以下为待调整的有效进程(共2个)==========
PID 原NICE值 进程命令
12345 0 python test1.py
67890 0 python test2.py
确认是否调整以上进程的nice值为-5?(y/n,默认n):y
开始批量调整进程优先级,目标nice值=-5...
成功调整:PID=12345 → nice值=-5
成功调整:PID=67890 → nice值=-5
========== 调整结果验证 ==========
PID 原NICE值 新NICE值 进程命令
12345 0 -5 python test1.py
67890 0 -5 python test2.py
==================== 脚本执行完成!====================
注意:1. 优先级仅影响CPU调度,IO型卡顿调整无效果;2. 不要将进程设为-20避免抢占系统资源。如果需要调整禁止调整的系统核心进程、修改nice值范围,直接修改脚本中配置区的内容即可,注释已标注清楚,无需修改核心逻辑:
# 系统核心进程,禁止调整(模糊匹配),添加/删除即可
FORBIDDEN_PROCS=("systemd""kernel""sshd""bash""sh""top""ps""renice""sudo")
# nice值合法范围,一般无需修改
NICE_MIN=-20
NICE_MAX=19ps -ef | grep 进程名确认)sudo -i)后重新执行脚本chmod +x batch_nice.sh赋予执行权限renice命令,增加了权限、安全、参数三重校验,避免新手误操作;