按名字喊停 - pkill
.. _linux_pkill_beginner:
.. note::
抽刀断水水更流,举杯消愁愁更愁。
唐 李白《宣州谢脁楼饯别校书叔云》
知道 PID 时,:ref:linux_kill_beginner 一枪一个准;只记得进程名、或者同名进程一窝蜂时,pkill 更省事——按名字(或其它属性)匹配,再统一发信号。
它和 :ref:linux_pgrep_beginner 是一对:pgrep 负责找出来给你看,pkill 负责喊停。man 页也是合写的。
pkill 的官方定义为:
pgrep, pkill - look up or signal processes based on name and other attributes
命令格式
1 | $ pkill [选项] pattern |
默认发送 SIGTERM,给进程一个体面收尾的机会。常用选项:
-u 用户:只动该用户的进程-9/-KILL:直接SIGKILL(对方无法捕获,最后手段)-f:用完整命令行匹配,而不只是进程名-l:列出信号名(部分实现)
按进程名终止
1 | $ pkill firefox |
匹配到名字里带 firefox 的进程,发送默认终止信号。先用 pgrep 确认再杀,更稳妥:
1 | $ pgrep -a firefox |
指定用户
只收拾某个用户名下的进程,避免误伤别人:
1 | $ pkill -u alice python |
强制结束
温温柔柔不走时,再上 -9:
1 | $ pkill -9 hung-app |
-9 不给清理机会,可能留下锁文件或半截临时文件;能 TERM 解决就别一上来就 KILL。
按完整命令行匹配
进程名都叫 python 时,用 -f 盯命令行里的脚本路径:
1 | $ pkill -f '/home/alice/jobs/sync.py' |
pkill 手感爽,也更容易“杀得太宽”。pattern 尽量写具体,重要环境先 pgrep 预览,再动手。