系统学习 macOS 学习路径:从 BSD 文件命令到系统、网络与开发维护

killall

按进程名批量发信号,省去逐个查 PID。

补充说明

killall 用进程名(不是完整命令行)匹配,默认发 TERM;-s 指定信号,-u 限定用户,-v 打印匹配结果,-0 只检查是否存在。它适合处理 Finder、Dock、mDNSResponder 这类名字稳定的系统进程,也能一次结束同一用户的多个实例。

边界:macOS 的进程名来自内核的 p_comm,长度有限(约 16 字节),超长名字可能匹配不到;按完整命令行或参数匹配要用 pgrep -f 配合 kill。killall 不区分“服务”和“普通进程”,launchd 管理的进程被杀后会被重新拉起,真正停服务要用 launchctl。

常用示例

# 1. 重启 Dock;launchd 会自动把它拉起来
% killall -v Dock

# 2. 刷新 DNS 缓存,必须用 sudo
% sudo killall -HUP mDNSResponder

# 3. 只检查进程是否存在,不发信号
% killall -0 Finder; echo $?

# 4. 只结束 _www 用户的 httpd 进程
% sudo killall -u _www -s TERM httpd

# 5. 名字带空格时加引号
% killall -s TERM "Google Chrome"

# 6. 结束某个用户的所有进程前,先确认范围
% sudo killall -u _www -v -s TERM

易错点与排错

相关命令

参考链接

读完自测

合上页面,先回答,再展开对照。

  1. killall 匹配的是进程名还是完整命令行?名字过长时怎么办?
  2. 为什么 killall Dock 之后 Dock 又出现了?这和 killall -9 的风险有什么关系?
  3. 普通用户执行 sudo killall -HUP mDNSResponder 时,为什么必须加 sudo?
答案
  1. 匹配内核进程名(p_comm),不是完整命令行;超长名字可能截断,改用 pgrep -f 找 PID 再 kill。
  2. Dock 由 launchd 管理,被杀后自动重启;-9 同样会重启,但跳过清理,可能丢失界面状态。
  3. mDNSResponder 以系统用户运行,普通用户无权限向它发信号;sudo 才能以 root 身份发送。
微信小程序码:扫码打开命令速查小程序

小程序版

微信扫码,随时查命令