如何用cpulimit限制进程CPU使用率,避免树莓派Debian系统过热
嘿,我太懂你这种困扰了——树莓派跑视频转码这类高负载任务时,CPU温度蹭蹭往上涨,尤其是想用cpulimit限制却发现它不直接支持bash命令,只认PID或者可执行文件,确实有点卡手。别慌,我给你几个实用的解决方案:
方法1:先启动任务再绑定cpulimit
先把你的转码命令后台运行,拿到它的进程ID(PID),再用cpulimit精准限制。举个例子:
# 后台启动转码任务,同时记录它的PID ffmpeg -i input.mp4 output.mp4 & PID=$! # 限制该进程的CPU使用率为70%(数值可以根据你的散热情况调整) cpulimit -p $PID -l 70
这里的$!是bash的特殊变量,专门用来获取上一个后台进程的PID,完美解决了找不到目标进程的问题。哪怕你的转码逻辑是一串复杂的bash脚本,也可以用这个思路:先后台跑脚本,拿PID再限制。
方法2:写个包装脚本一键整合
如果你想一步到位,不用手动处理PID,可以写个简单的bash脚本把命令和cpulimit绑在一起。比如创建一个limit_transcode.sh文件:
#!/bin/bash # 启动传入的命令并后台运行 "$@" & PID=$! # 自动给这个进程加上CPU限制 cpulimit -p $PID -l 70 # 等待任务结束 wait $PID
然后给脚本加执行权限:
chmod +x limit_transcode.sh
使用的时候直接把你的转码命令当参数传进去就行:
./limit_transcode.sh ffmpeg -i input.mp4 output.mp4
这样脚本会自动帮你启动任务、绑定cpulimit,直到转码完成才退出,全程不用你操心。
方法3:直接限制可执行文件(适合固定工具)
如果你的转码用的是固定工具(比如ffmpeg),还可以让cpulimit直接监控这个可执行文件,只要它运行就自动限制CPU。比如:
# 后台启动cpulimit,监控ffmpeg并限制到70%CPU cpulimit -e ffmpeg -l 70 & # 正常运行你的转码命令 ffmpeg -i input.mp4 output.mp4 # 任务结束后杀掉cpulimit进程(避免它一直后台跑) pkill cpulimit
这个方法的好处是不用管PID,但要注意:如果此时有其他ffmpeg进程在运行,也会被一起限制,所以适合只有你这一个转码任务的场景。
最后补个小建议:除了软件限制,给树莓派加个散热片或者小风扇,降温效果会更明显,和cpulimit配合起来能让CPU温度稳很多。
内容的提问来源于stack exchange,提问作者Johannes Lemonde
相关产品推荐
相关产品推荐

