0%

按名字喊停 - pkill

按名字喊停 - 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
2
$ pgrep -a firefox
$ pkill 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 预览,再动手。

处无为之事,行不言之教;作而弗始,生而弗有,为而弗恃,功成不居!