我cpulimit
在 Bash 脚本中使用 CPU 使用率有限的命令 (ffmpeg) 来运行某个命令,但我想知道该命令是否失败。但是当命令 (ffmpeg) 因任何错误而失败时,cpulimit 仍然存在,退出状态为 0。我该怎么办?
我的 cpulimit 命令:cpulimit -l 300 -f -- ffmpeg ...
CPUlimit 版本 3.0
操作系统:Ubuntu Linux 6.8.0
注意:除非我传递 --monitor-forks 标志,否则 cpulimit 无法在给定命令的 forks 上工作,手册中说这是一个坏主意,特别是在脚本中:
-m, --monitor-forks 监视和限制目标进程的子进程 警告:使用此标志通常不是一个好主意,尤其是在 shell 脚本中。脚本中的命令将各自生成一个进程,而这些进程又会生成更多此程序的副本来限制它们,从而使系统陷入瘫痪。此外,子进程可能会死亡,其 PID 可能会被分配给另一个程序。当这种情况迅速发生时,可能会导致 cpulimit 在旧信息有机会被清除之前就瞄准新的、非预期的进程。仅在特定情况下使用 monitor-forks 选项,最好在没有生成大量新进程的机器上。
请不要
cpulimit
在 2025 年使用。这是一个 2006 年的程序,其工作方式是向进程快速发送“STOP”和“CONTINUE”信号,具体取决于受控进程使用的 CPU 时间。在编写该程序时,这并不是一个好主意,现在有了频率缩放的多核处理器,它已经完全不够用了;它使你正在做的事情变得不必要地低效(导致在相同的总体工作量下 CPU 负载增加,而你打算减少这种情况)。(老实说,我不知道人们从哪里挖出这个程序;一定是那些推荐它的地方,没有一个大红色的警告标志说“实际上,不要使用它!”出于某种原因;这是从这个网站的某个答案推荐给你的吗?如果是这样,请通过链接到该答案让我们知道!)。
因此,“是一个编写糟糕的程序,并吸收了我的程序的返回代码”的解决方案
cpulimit
是“好吧,不要使用cpulimit
”。你正在运行现代主流 Linux 发行版——恭喜!不错的选择!这意味着你拥有 systemd,这意味着你可以运行
ffmpeg
在后台启动任务(你可以使用 查看它执行的操作journalctl -xef --user
),或者在前台运行。