按进程名批量发信号,省去逐个查 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
killall -9 跳过清理,应用可能丢未保存数据、留下锁文件;先 -s TERM,确认后再升级。killall python3 匹配不到 /usr/bin/python3 script.py 以外的长名字或解释器别名;用 pgrep -fl 核对,再 pkill -f 或按 PID 杀。killall 可能报 “No matching processes belonging to you were found”,需要 sudo。killall Finder、killall Dock 会立刻重启图形界面组件,未保存的窗口状态可能丢失;远程会话或演示中不要随手执行。killall -9 WindowServer 会让所有用户立即退出图形会话,等同于强制注销,属于高危操作。killall 没匹配到进程时返回非 0,set -e 脚本会中断;先用 -0 或显式处理退出码。kill — 按 PID 精确发送信号。ps、top — 确认进程名和归属用户。launchctl — 停止或重载 launchd 服务。killall — 对照 Linux 的匹配规则。合上页面,先回答,再展开对照。
killall 匹配的是进程名还是完整命令行?名字过长时怎么办?killall Dock 之后 Dock 又出现了?这和 killall -9 的风险有什么关系?sudo killall -HUP mDNSResponder 时,为什么必须加 sudo?p_comm),不是完整命令行;超长名字可能截断,改用 pgrep -f 找 PID 再 kill。-9 同样会重启,但跳过清理,可能丢失界面状态。sudo 才能以 root 身份发送。
小程序版
微信扫码,随时查命令