Linux / Unix:killall 命令示例
我是 Linux 和 Unix 的新用户和系统管理员。如何在 Linux 或类 Unix 系统上按名称(而不是按 PID)终止进程?
kill 命令
通过PID(进程 ID)终止进程。要通过名称终止进程,请使用killall命令。
killall 命令详细信息 | |
---|---|
描述 | 通过名称终止进程 |
类别 | 流程管理 |
难度等级 | 简单的 |
Root 权限 | 是的 |
预计阅读时间 | 4 分钟 |
- Linux
- 苹果 macOS (OS X) Unix
- FreeBSD
目的
在 Linux/FreeBSD/Apple OS X Unix 上按名称终止进程或命令。
句法
基本语法如下:
killall process
或
killall -SIGNAL process
或
killall command
或
killall -15 command
或
killall -u {userName} processName
或
killall -t {ttyName} processName
或
killall [options] processName
了解 Linux 和 Unix 信号
要显示所有已知信号名称的列表,请输入:
$ killall -l
示例输出:
HUP INT QUIT ILL TRAP ABRT IOT BUS FPE KILL USR1 SEGV USR2 PIPE ALRM TERM STKFLT CHLD CONT STOP TSTP TTIN TTOU URG XCPU XFSZ VTALRM PROF WINCH IO PWR SYS UNUSED
默认情况下,将向进程发送 SIGTERM/TERM (15),如果没有,则将信号发送给 killall 命令。用户和系统管理员都可使用以下信号:
信号名称 | 数值 | 描述 |
---|---|---|
信 合 |
1 | 控制终端检测到挂断。更新服务器配置文件后,使用此命令重新加载服务器。 |
信号 情报 |
2 | 来自键盘的中断。 |
信号 退出 |
3 | 告知命令退出。 |
信号 杀死 |
9 | 终止正在运行的进程。该信号不能被进程阻止,必须作为终止进程的最后手段。KILL 信号不允许进程正常退出。 |
信号 终端 |
15 | 正常终止正在运行的进程,即关闭所有文件并彻底退出。这是默认信号。 |
停止信号 |
19 | 停止/暂停正在运行的进程。 |
信号 连接 |
18 | 如果停止/暂停,则继续进程。 |
您可以终止自己的进程。要终止所有其他用户的进程,您需要具有特权的 root 用户。
killall 命令示例
在此示例中,启动一个名为 xeyes 的进程,如下所示:
$ xeyes &
示例输出:
[1] 3514
要终止 xeyes 进程,请键入:
$ killall xeyes
或以名称形式发送信号:
$ killall -TERM xeyes
或以数字形式发送信号:
$ killall -15 xeyes
示例输出:
[1]+ Terminated xeyes
要在屏幕上获得更详细的输出,请传递-v选项:
$ killall -v -TERM xeyes
示例输出:
Killed xeyes(4279) with signal 15 [1]+ Terminated xeyes
如何终止特定用户拥有的进程?
语法如下:
killall -u {user} process
要终止示例用户所拥有的 php-cgi 进程:
# killall -u example php-cgi
或
# killall -TERM -u example php-cgi
或
# killall -KILL -u example php-cgi
如何终止在特定 tty 上运行的进程?
要显示终端名称,请使用tty 命令:
$ tty
示例输出:
/dev/pts/0
您也可以使用 ps 命令或w 命令来显示 tty:
终止运行 pts/0 的 Firefox 进程的语法如下:
OR
OR
OR 将用户名和 tty 组合如下:
$ ps
$ w
killall -t pts/0 firefox
killall -t pts/0 firefox
killall -t pts/0 firefox
# killall -u example -t pts/0 firefox
杀死进程组
在此示例中,杀死名为 php-cgi 的进程组而不是进程名:
$ sudo killall -KILL -v -g php-cgi
示例输出:
图 01:killall 命令运行情况
确认终止进程
-ikillall 命令可以在终止进程之前通过传递以下选项来请求交互式确认:
$ killall -i gedit
示例输出:
动图 01:killall 命令演示
按指定时间终止进程
传递-y TIME选项以杀死比给定 TIME 更年轻的进程。传递选项-o TIME以杀死比给定 TIME 更早的进程。TIME 可以以以下浮点格式表示,然后是单位:
- s几秒钟
- m分钟
- h数小时
- d数天
- w数周
- M数月
- y多年来
以下是及时终止进程的一些示例:
# Kill firefox command younger than 3 days killall -y 3d firefox # Kill top command younger than 2 minutes killall -y 2m firefox # Kill perl-cgi command older than 1 months killall -o 1M perl # Kill nginx server older than 2 years killall -o 2y nginx # Kill ping command older than 2 weeks with confirmation and owned by vivek user killall -u vivek -i -o 2w ping
killall 命令选项
从命令手册页:
选项 | 意义 |
---|---|
-e | 要求非常长的名称完全匹配。 |
-I | 不区分大小写的进程名称匹配。 |
-g | 杀死进程组而不是进程。 |
-y | 杀死比 TIME 更年轻的进程。 |
-o | 终止早于 TIME 的进程。 |
-i | 杀戮前要求确认。 |
-l | 列出所有已知的信号名称。 |
-q | 不要印刷投诉。 |
-r | 将 NAME 解释为扩展的正则表达式。 |
-s | 发送此信号而不是 SIGTERM。 |
-u | 仅终止以用户身份运行的进程。 |
-v | 报告信号是否成功发送。 |
-V | 显示版本信息。 |
-w | 等待进程终止。 |
相关媒体
本教程还提供简短视频格式: