很早之前大家就发现,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.
在下载 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进行处理,非常感谢!