Bashrc中配置projectMSDL别名时renice命令无法生效问题
问题解决:别名中renice命令未执行的修复方案
核心问题分析
你当前的别名存在两个关键问题:
- 语法错误:
$('pgrep projectMSDL')是错误的命令替换写法,正确格式应为$(pgrep projectMSDL)(去掉多余的单引号)。 - PID匹配不准确:即使修正语法,
pgrep可能会匹配系统中已存在的其他projectMSDL进程,或者因为进程刚启动还未被pgrep捕获,导致renice失效。
最优修复方案
直接使用bash内置变量 $! 获取刚启动的后台进程PID($! 会返回最后一个后台进程的ID),精准定位当前启动的实例,同时修正语法问题。
修改后的别名如下:
alias projectMSDL="XDG_RUNTIME_DIR='/run/user/$UID' projectMSDL --presetPath=/usr/share/projectM/presets --texturePath=/usr/share/projectM/textures --enableSplash=1 --fullscreen=1 --vsync=1 --vsyncAdaptive=1 --width=1280 --height=720 --fullscreenWidth=1920 --fullscreenHeight=1080 --fps=0 --shuffleEnabled=1 --presetDuration=24 --transitionDuration=8 --hardCutsEnabled=0 beatSensitivity=1.69 >/dev/null 2>&1 & sudo renice -n -15 -p $!"
额外注意事项
sudo密码问题:如果执行
sudo需要输入密码,后台的renice命令会卡住无法执行。可通过配置sudo免密解决:- 执行
sudo visudo编辑sudoers文件 - 添加一行(替换
your_username为你的实际用户名):your_username ALL=(ALL) NOPASSWD: /usr/bin/renice - 保存退出后,sudo执行renice就无需输入密码了。
- 执行
多实例兼容性:使用
$!后,每次执行别名只会调整当前启动的实例优先级,不会影响其他已运行的projectMSDL进程,完全满足多实例启动需求。验证效果:启动实例后,执行以下命令查看进程优先级:
ps -o pid,nice -C projectMSDL若
NI列显示为-15,说明renice生效。
内容的提问来源于stack exchange,提问作者headrift
相关产品推荐
相关产品推荐

