嵌入式系统上使用cpulimit

一、下载源码

官网地址:https://gitcode.com/gh mirrors/cp/cpulimit

二、修改Makefile

执行make

编译出错:

修改 cpulimit.c,将 头文件中的一个time.h屏蔽掉一个

再次make,编译通过,目录下生成可执行文件cpulimit。

三 使用方法

cpulimit的用法

cpulimit 是一个用于限制进程 CPU 使用率的小工具。你可以指定某个进程的 PID 或可执行程序名称来控制它的 CPU 使用情况,避免某个进程过度占用系统资源。

基本用法

cpulimit -l <限制百分比> -p <进程PID> -e <可执行文件名称> [选项]

常用选项

选项  描述

-l <百分比>    限制 CPU 使用率(例如 -l 50 限制为 50%)

-p <PID>    限制指定进程的 PID

-e <名称> 限制通过进程名指定的可执行文件

-b  后台运行 cpulimit

-z  如果进程不存在则等待,直到进程启动再限制

-v  显示详细信息(verbose mode)

-h  显示帮助信息

示例

1. 限制某个 PID 的 CPU 使用率

cpulimit -p 12345 -l 30

将 PID 为 12345 的进程 CPU 使用率限制在 30%。

2. 限制某个进程名称的 CPU 使用率

cpulimit -e firefox -l 40

将 firefox 进程的 CPU 使用率限制在 40%。

3. 后台限制某个进程的 CPU 使用率

cpulimit -p 12345 -l 50 -b

将 PID 为 12345 的进程限制为 50%,并将 cpulimit 本身放入后台。

4. 等待进程启动并限制 CPU 使用率

cpulimit -e my_program -l 25 -z

如果 my_program 进程未运行,cpulimit 将等待它启动并限制其 CPU 使用率为 25%。

注意事项

以 root 权限运行:如果要限制的进程不属于当前用户,需要使用 sudo 运行。

sudo cpulimit -p 12345 -l 20

多核系统:cpulimit 的限制是针对 单核 的。如果你有多核 CPU,限制值会应用于每个核心。例如,在 4 核系统上,50% 的限制表示最多使用 200% 的 CPU(4 核中的 2 核全速运行)。

长期监控:cpulimit 不会直接修改进程优先级,而是通过定期暂停和恢复进程来实现限制。因此,它更适合临时限制 CPU 使用,而非长期监控。

总结

cpulimit 是一个轻量级工具,适用于临时限制进程的 CPU 占用,避免系统资源被单个进程大量消耗。它的用法简单,可以通过进程 ID 或名称快速应用限制。如果你需要更持久的资源管理,可以考虑使用 cgroups 或 systemd 的资源管理功能。

问题:如果一个程序会启动两个进程,怎么使用cpulimit

如果一个程序启动了多个进程,你可以针对 每个进程 分别使用 cpulimit,通过 PID 或 可执行文件名 进行限制。这里有几个解决方法:

方法 1:根据 PID 限制每个进程

使用 ps 或 pgrep 找到两个进程的 PID:

pgrep <程序名>

例如,如果程序名为 my_program,运行:

pgrep my_program

假设输出如下:

12345

12346

针对每个 PID 运行 cpulimit:

cpulimit -p 12345 -l 30 -b

cpulimit -p 12346 -l 30 -b

这会将两个进程的 CPU 使用率分别限制在 30%。

方法 2:根据进程名限制所有相关进程

如果多个进程使用相同的可执行文件名,可以通过 进程名 统一限制。

但是,请注意这种方式会对 每个匹配的进程 应用限制。

cpulimit -e my_program -l 30 -b

这会将所有名为 my_program 的进程的 CPU 使用率限制在 30%(每个进程单独占用 30%)。

方法 3:通过 shell 脚本自动限制所有进程

如果进程名较多或你不想手动一个个限制,可以编写一个脚本来自动查找并限制每个进程。

#!/bin/bash

# 获取所有目标进程的 PID

PIDS=$(pgrep my_program)



# 遍历每个 PID,应用 cpulimit

for PID in $PIDS; do

    echo "限制进程 $PID 的 CPU 使用率为 30%"

    cpulimit -p $PID -l 30 -b

done

保存为 limit_cpu.sh,并赋予可执行权限:

上一篇:iOS 14 自定义画中画悬浮窗 Custom AVPictureInPictureController 实现方案


下一篇:Leetcode 前 k 个高频元素