Skip to content

任务管理器

Task Manager 插件把你 Mac 上正在运行的进程变成一个你可以浏览的文件夹。它在驱动器栏中显示为一个 TaskManager 驱动器;打开它,每个进程都是一行,你可以对其排序、像文件一样查看,或结束它 —— 使用你已经用于文件的相同按键。由于它是插件,你可以从 配置 ▸ 插件… 中将其停用或移除。

打开它

  1. 在驱动器栏中单击 📊 TaskManager 条目(它就在你的启动驱动器之后)。
  2. 面板会填满,每个正在运行的进程占一行。每行的名称是进程名后跟其 PID,例如 Finder (462)。
  3. 你在其中时 TaskManager 按钮保持选中,标签页也以该驱动器命名。切换到另一个标签页再切回来——或者退出并重新打开 App——标签页都会回到进程列表。要离开它,向上一级或在驱动器栏中点按另一个宗卷。

Task Manager 列出正在运行的进程,带有 PID、CPU、内存和命令列 (图:以文件列表形式显示的正在运行的进程,你可以对其排序和操作。)

每列的含义

除了日期(启动时间)列,Task Manager 还添加了进程列。进程行的大小显示为 DIR,因为进程是可以打开的文件夹(见下文)——内存有自己的列:

列 含义
PID 进程 id
CPU % 近期处理器使用率(需要第二次刷新后才会出现)
Memory 内存占用(footprint)——该进程需要负责的部分(活动监视器显示的数字)
Resident 常驻大小,含共享页;对每个进程都会填写
Threads 线程数
State R 运行 · S 睡眠 · T 已停止 · Z 僵尸 · I 空闲,外加 ps 附加的后缀(s = 会话首进程,+ = 前台,N = 低优先级)
User 所有者
PPID 父进程 id
Read 自进程启动以来从磁盘读取的字节数
Written 自进程启动以来写入磁盘的字节数
Wakeups 自进程启动以来的中断唤醒次数
Signed 谁签署了该程序:Apple、拥有 Developer ID 的团队、临时签名或未签名
Command 完整命令行

像在普通文件夹中一样,可以按任意列排序(例如 CPU % 或 大小/内存)。

查看或结束进程

  • 查看(F3) 会显示一份 Process Information 报告:名称、PID、父进程、用户、状态、线程、内存、CPU、启动时间、可执行文件路径以及完整命令行。
  • 删除(F8) 会结束进程。第一次删除会发送一个温和的 退出(SIGTERM);对仍在运行的进程再次删除会升级为 强制退出(SIGKILL)。插件绝不会针对 PID 1。

查找正在使用某个文件的进程

右键点按任意行并选择 按文件查找进程…,然后输入文件路径。当前打开该文件的每个进程都会高亮显示,光标会跳到第一个能够修改它的进程:

  • 蓝色 — 进程只读取该文件。
  • 橙色 — 进程只写入该文件。
  • 紫色 — 进程两者都做。

路径会从另一个面板的光标位置预先填入,因此你可以在那边指向一个文件,无需输入即可提问。同一菜单中的 按端口查找进程… 回答的是姊妹问题:哪个进程正在 TCP/UDP 端口上监听。选择 清除文件高亮 可移除这些颜色;离开进程列表同样会移除它们。

打开进程即可看到它的文件

在进程上按回车键——或双击它——面板就会列出该进程当前打开的文件,作为带有真实大小和日期的普通文件行。在那里:

  • 查看 (F3) 打开文件本身。
  • 转到文件 在另一个面板中显示它,你可以在那里处理它。
  • 在访达中显示 把它交给访达。

只有打开的文件才算:进程仅映射到内存中的库,以及它的工作目录,都不是打开的文件。其他用户的进程会显示为空文件夹。

说明

  • 基本信息(PID、父进程、用户、状态、签名)对每个进程都可读。内存占用、线程、磁盘 I/O 和打开文件列表可读的是你自己的进程,在一台普通的 Mac 上这已是列表的大部分。对于其他用户的进程,CPU 和 Resident 改为从 ps 填充——那是整个生命周期的平均值,而不是其他行所带的两次采样之差——线程和内存占用则保持为空。
  • CPU % 是两次采样之间的变化量,因此在面板第二次刷新之前它是空白的(面板大约每两秒刷新一次)。
  • 除结束进程外,该列表是只读的 —— 你无法将文件复制到其中。
  • 高亮颜色随你的配色主题变化:Norton 调色板改用绿色、红色和洋红色。
  • 只能找到你的账户有权查看的句柄,实际上就是你自己的进程。进程仅映射到内存中的库,或其工作目录,都不是打开的句柄,因此不会报告。
  • Signed 列会在最初几秒内逐渐填满:读取一个签名约需一毫秒,而不同的程序有数百个,因此每次刷新读取几个并记住结果。空白单元格表示“尚未读取”,而不是“未签名”。
  • Signed 说明谁签署了程序,而不是它是否已公证:检查公证需要对整个程序做哈希,每个都要花上几秒。
  • 这里的快速筛选(Ctrl+S)也会匹配列而不仅仅是名称,并且每一项都可以指明它作用的列:user:root state:R 就是在问 root 现在正在运行什么。各项以空格分隔并且必须全部匹配;没有指明列的文字仍然是一个整体的子串,包括其中的空格。