本文讲述 Linux 命令 pkill
的基础用法。
pkill
是一个命令行工具,它根据现有标准,给正在运行的程序进程发送信号。进程可以通过他们的完整名字,部分名字,用户进程或者其他属性指定。
这个pkill
命令是procps
(或者procps-ng
)软件包中的一部分。该软件包被预装在几乎所有的 Linux 发行版上。 pkill
是一个基于打印匹配进程列表的pgrep
程序的封装。
一、如何使用 pkill 命令
pkill
命令的语法如下:
pkill [OPTIONS] <PATTERN>
匹配的<PATTERN>
被指定使用扩展正则表达式。
当不使用任何选项时,pkill
发送15
(TERM
)信号给匹配名字的所有运行程序的 PIDS。例如,想要完美停止所有 firefox 进程,你需要运行:
pkill -9 firefox
当最少有一个正在运行的进程匹配给出的名字时,这个命令返回0
,否则,返回退出代码1
。在 shell 脚本中,返回值很有用。
想要发送不同的信号给匹配进程,运行pkill
命令加上--signal
选项,再加上进程号或者进程名。另一种发送信号的方式就是,运行pkill
加上使用-
作为前缀的信号名字或者信号序号。
使用kill -l
命令列出所有可用的信号。
最常被使用的信号是:
- 1(HUP):重新加载进程
- 9 (KILL): 杀死进程
- 15(TERM):完美地停止一个进程
信号可以通过三种不同的方式来指定:
- 使用一个信号序号(例如: -1)
- 使用 “SIG” 前缀 (例如: -SIGHUP)
- 不使用 “SIG” 前缀 (例如: -HUP)
例如,想要重新加载 Nginx 进程,你需要运行:
代码语言:javascript复制pkill -HUP nginx
pkill
使用正则表达式来匹配进程名称。这是一个好办法,在发送信号之前,先使用pgrep
命令来打印匹配进程。 例如,列出所有名称中包含ssh
的进程:
1039 sshd
2257 ssh-agent
6850 ssh
31279 ssh-agent
如果你想依照名字准确匹配进程,并发送信号给它:
代码语言:javascript复制pkill '^ssh$'
代码语言:javascript复制符号^代表字符串开头,字符串$代表字符串结尾
默认情况下,pkill
仅仅匹配进程名称。如果使用-f
选项,这个命令将会匹配所有参数列表。如果命令中包含空格,将整个命令用引号括起来:
pkill -9 -f "ping 8.8.8.8"
使用-u
选项告诉pkill
仅仅匹配给出用户所运行的进程。
pkill -u mark
想要指定多个用户,在多个用户名之间添加逗号:
代码语言:javascript复制pkill -u mark,danny
你可以混合使用选项和搜索样式。例如,发送KILL
信号给所有由"mark"用户运行的,并且进程名包含"gnome"的所有进程,你需要输入:
pkill -9 -u mark gnome
想要显示最老的或者最新的进程,使用-n
或者-o
选项。
例如,想要杀死最近启动的 screen:
代码语言:javascript复制pkill -9 -n screen
二、总结
pkill
命令被用来发送信号给正在运行的程序
原文 :https://linuxize.com/post/pkill-command-in-linux/