Linux / UNIX:Kill 命令示例
我是 Linux 和 Unix 的新用户。如何使用命令提示符向 Linux 或类 Unix 操作系统下的进程发送 KILL 信号?
使用 kill 命令向每个由 pid(进程标识符)指定的进程发送信号。默认信号是 SIGTERM(终止进程)。
终止命令详细信息 | |
---|---|
描述 | 使用给定信号终止进程 |
类别 | 流程管理 |
难度等级 | 简单的 |
Root 权限 | 不 |
预计阅读时间 | 4 分钟 |
目的
删除后台进程或作业
句法
基本语法如下:
kill PID
或者
kill -s signalName PID
或者
kill -signalName PID
或者
kill -signalNumber PID
在哪里,
- signalNumber:一个非负十进制整数,指定要发送的信号而不是默认的 TERM。
- signalName:指定要发送的信号的符号信号名称,而不是默认的 TERM。
- PID :指定应终止的进程列表。每个 PID 可以是以下任一值:
- n:如果PID是正值,kill命令会发送进程ID等于PID的进程。
- 0:当前进程组内的所有进程都已发出信号。
- -1:所有 pid 大于 1 的进程都将被发出信号,即 kill 命令将信号发送给发送者的有效用户拥有的所有进程。
常见的 Linux 和 UNIX 信号名称和编号
所有可用的 UNIX 信号都有不同的名称,并映射到如下所述的某些数字:
数字 | 姓名(简称) | 描述 | 用于 |
---|---|---|---|
0 | SIGNNULL(空) | 无效的 | 检查对 pid 的访问 |
1 | 信号(HUP) | 挂断 | 终止;可被困住 |
2 | 信号情报(INT) | 打断 | 终止;可被困住 |
3 | SIGQUIT(退出) | 辞职 | 以核心转储终止;可被捕获 |
9 | 信号杀死(KILL) | 杀 | 强制终止;无法被困 |
15 | SIGTERM(终端) | 终止 | 终止;可被困住 |
24 | 信号停止(停止) | 停止 | 暂停进程;无法被捕获。如果没有向 kill 命令提供信号,则这是默认设置。 |
二十五 | 信号传输协议 (STP) | 终端 | 停止/暂停进程;可能被困 |
二十六 | SIGCONT(连续) | 继续 | 运行已停止的进程 |
请注意,数字和信号之间的具体映射在不同的 Unix 实现中可能有所不同,请参阅手册页条目 signal(5),通过输入以下命令:
man 5 signal
或者
man 7 signal
指定信号名称的列表存储在中/usr/include/sys/signal.h;因此使用 more 命令来查看相同的内容:
$ more /usr/include/sys/signal.h
kill 命令示例
要列出信号名称,请传递-l选项如下:
$ kill -l
示例输出:
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGEMT 8) SIGFPE 9) SIGKILL 10) SIGBUS 11) SIGSEGV 12) SIGSYS 13) SIGPIPE 14) SIGALRM 15) SIGTERM 16) SIGURG 17) SIGSTOP 18) SIGTSTP 19) SIGCONT 20) SIGCHLD 21) SIGTTIN 22) SIGTTOU 23) SIGIO 24) SIGXCPU 25) SIGXFSZ 26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGINFO 30) SIGUSR1 31) SIGUSR2
查找进程的 PID
使用“pgrep 命令”或“ps 命令,以grep 命令作为 shell 管道/过滤器”。在此示例中,查找 Firefox 的 PID,输入:
$ pgrep firefox
或
$ ps aux | grep [f]irefox
示例输出:
向进程 ID 257 发送终止信号
使用以下命令杀死 pid 257 并正常退出:
kill 257
要查找任何作业或命令的 pid,请使用 ps 命令,如上所述:
ps | grep command ps aux | grep command ps aux | grep apache pgrep apache
以下所有命令都与 -9 SIGKILL 等效(即强制终止 1414 进程而不进行“清理”),并且应仅作为终止进程的最后手段使用:
kill -s SIGKILL 1414 kill -s KILL 1414 kill -s 9 1414 kill -SIGKILL 1414 kill -KILL 1414
如何将默认的 TERM/SIGTERM (15) 发送给多个 pid #1212、1313 和 1414?
键入以下命令:
$ kill 1212 1313 1414
键入以下命令将 KILL 单个发送到多个 pid:
$ kill -9 1212 1313 1414
如何指定要发送到 PID # 4242 的信号?
通过选项将-s信号指定为信号编号或信号名称。语法是:
$ kill -s signal pid
要为 pid # 4242 发送停止/暂停信号,请输入:
$ kill -s stop 4242
在此示例中:
## Start a gui command called xeyes in background: xeyes & jobs -l ## Stop it xeyes whose pid is 3405 by sending STOP (stop/suspend) signal kill -s STOP 3405 jobs -l ## Resume/run stopped xeyes whose pid is 3405 by sending CONT (continue) signal kill -s CONT 3405 jobs -l ## Finally kill xeyes whose pid is 3405 by sending TERM (exit/terminate safely) signal kill -s TERM 3405
如何终止 root 或系统用户拥有的特权进程/PID?
您需要使用 su 或 sudo 命令以 root 用户身份登录,以便将指定信号发送到 root/system 用户拥有的指定进程或进程组。在此示例中,使用 su 命令登录系统:
$ su - Password: # pgrep httpd 4243 # kill 4243
或者,如果系统上配置了 sudo 命令来终止 PID # 4243:
$ sudo kill 4243 Password:
终止命令选项
从命令手册页:
选项 | 意义 | 示例 |
---|---|---|
-s signal_name | 指定要发送的信号的符号信号名称,而不是默认的 TERM | kill -s KILL 201 kill -s TERM 201 kill -s SIGKILL 1313 |
-l | 打印信号名称列表 | kill -l kill -l 19 kill -l KILL |
相关媒体
本教程还提供简短视频格式: