对毒瘤软件说“不”:macOS 如何限制 CPU 占用

很早之前大家就发现,macOS 的活动监视器真的就只是一个监视器,并不能像 Windows 的任务管理器那样可由用户手动设置进程的优先级。但当我们真的有这样的需求时,该怎么办呢?

我们知道,其实苹果的 macOS 是一个半开半闭源的操作系统,大致来讲,GUI 部分是闭源的,这也是 macOS 的精髓;核心系统部分(darwin-xnu)是开源的。这使得用户或者说开发者依然有机会进行系统调用,以实现需求——限制某个进程的 CPU 资源占用。

也许你会好奇,什么人会有这种需求呢?当某些公司强制要求员工们安装「xx 安全软件」并且时不时还在后台疯狂扫描文件吃 CPU,还不准你关闭和卸载的时候,你就有这个需求了。

▍方案一:cputhrottle

这个小工具没有 GUI,是个很轻便的命令行工具。从介绍便知:

cputhrottle is a small OS X command-line utility designed to limit the CPU usage of a process to which it attaches.

作者在其官方页面提供了源码下载和编译好的二进制执行文件。原本我以为这种 OS X 时代的软件已经不适用于现在版本的系统了,结果仍然可用,这估计得益于稳定的内核带来的良好兼容性(基本不会有哪个 OS 内核经常改系统调用的)。

在下载 cputhrottle.gz 解压后,我们需要先给予执行权限:

chmod +x cputhrottle

然后就可以直接使用了,第 1 个参数是进程的 pid,第 2 个参数是最大 CPU 占用百分比,假设某安全软件进程 id 为 2333,你只准它最多吃你 1% 的 CPU:

sudo ./cputhrottle 2333 1

# 一般来说,你可以用 ps 命令来查看进程的 pid

ps -ef

# 如果太多了不好找,可以筛选一下,前提是你要知道它可能的名字

ps -ef | grep “xx 安全软件或者它的英文名 “

这样就能保证它又不被杀死,还不拖慢你的电脑,可谓 「求死不得,求生不能」。为了使用方便,我们可以把执行文件放到 /usr/local/bin 目录下面,以后就可以在任意目录下直接执行了:

mv cputhrottle /usr/local/bin

# 以后可作为全局命令使用

sudo cputhrottle 2333 1

然而,在执行命令后,由于程序内部是死循环逻辑,所以会占用当前终端。更优雅的做法当然是让它到后台去执行,不影响我们终端的继续使用:

sudo cputhrottle 2333 1

# 执行命令后按下 control 和 Z,以挂起进程,终端会提示如下

# ^Z

# [1] + 12345 suspended sudo cputhrottle 2333 1

# 然后接着在终端输入 bg,会提示进程继续执行,这样就到后台

bg

# [1] + 12345 continued sudo cputhrottle 2333

如果觉得 bg 这种方式比较麻烦,也可直接用 nohup 命令:

sudo nohup cputhrottle 2333 1 &

上述 12345 是举例,它是你执行 cputhrottle 命令的进程 id,当你不再需要限制 2333 进程的 CPU 占用时,可以 kill 掉它:

sudo kill 12345

▍方案二:AppPolice

来源:少数派

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2021年6月1日
下一篇 2021年6月1日

相关推荐