Linux中的kill命令用来终止指定的进程(terminate a process)的运行,是Linux下进程管理的常用命令。通常,终止一个前台进程可以使用Ctrl+C键,但是,对于一个后台进程就须用kill命令来终止,我们就需要先使用ps/pidof/pstree/top等工具获取进程PID,然后使用kill命令来杀掉该进程。kill命令是通过向进程发送指定的信号来结束相应进程的。在默认情况下,采用编号为15的TERM信号。TERM信号将终止所有不能捕获该信号的进程。对于那些可以捕获该信号的进程就要用编号为9的kill信号,强行“杀掉”该进程。
### Linux中的kill命令详解
#### 一、概述
在Linux操作系统中,`kill`命令是一项极为重要的工具,用于管理和控制正在运行的进程。通过发送不同的信号给目标进程,`kill`命令可以实现对进程的终止、暂停、继续执行等多种操作。在日常的系统管理工作中,熟练掌握`kill`命令的使用方法对于及时处理问题进程至关重要。
#### 二、基本概念与作用
- **进程**: 在Linux中,每个正在运行的程序都被视为一个进程。
- **PID (Process ID)**: 每个进程都有一个唯一的标识符,称为PID。
- **信号 (Signal)**: 信号是一种软件中断,可以用来通知进程发生了一些特殊事件,例如进程被请求终止。在Linux中,有多种不同类型的信号,每种信号都有特定的用途。
#### 三、命令格式与功能
**命令格式**:
```
kill [参数] [进程号]
```
**命令功能**:
- 发送指定的信号到相应的进程。
- 不指定信号则默认发送SIGTERM(15)信号,用于终止指定的进程。
- 使用`-KILL`参数可以发送SIGKILL(9)信号,强制结束进程。
#### 四、命令参数详解
- `-l`: 列出所有可用的信号名称。
- `-a`: 当处理当前进程时,不限制命令名和进程号的对应关系。
- `-p`: 指定`kill`命令只打印相关进程的PID,而不发送任何信号。
- `-s`: 指定发送信号。
- `-u`: 指定用户。
#### 五、注意事项
1. **信号的使用**:
- `kill`命令可以带信号号码选项,也可以不带。如果不带信号号码,默认发送的是SIGTERM(15),此信号可以被进程捕获,以便进程可以在退出前进行必要的清理工作。
- 用户可以使用`kill`向进程发送特定的信号。例如,使用`kill -2 PID`等同于在前台运行的进程中按下Ctrl+C键。
- 普通用户通常只能使用不带信号参数的`kill`命令或最多使用`-9`信号。
2. **权限问题**:
- `kill`命令可以带有进程ID号作为参数。当用`kill`向这些进程发送信号时,必须是这些进程的所有者。
- 如果试图撤销一个没有权限撤销的进程或撤销一个不存在的进程,将会收到错误信息。
3. **多进程处理**:
- 可以向多个进程发送信号或终止它们。
- 当`kill`成功发送信号后,shell会在屏幕上显示进程的终止信息。有时这个信息不会立即显示,直到按下Enter键使shell的命令提示符再次出现时才会显示出来。
4. **副作用**:
- 应当注意,信号使进程强行终止可能会带来副作用,比如数据丢失或终端无法恢复到正常状态。因此,在发送信号时应当格外小心,只有在必要的情况下才使用SIGKILL(9)信号。
5. **特殊情况**:
- 要撤销所有后台作业,可以输入`kill 0`。因为有些在后台运行的命令会启动多个进程,追踪并找到所有要杀掉的进程的PID是一件很麻烦的事情。此时,使用`kill 0`来终止所有由当前shell启动的进程是一个有效的方法。
#### 六、使用实例
**实例1**: 列出所有信号名称
```bash
kill -l
```
输出示例:
```
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL
5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE
9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2
13) SIGPIPE 14) SIGALRM 15) SIGTERM 16) SIGSTKFLT
...
```
**实例2**: 终止进程
假设要终止PID为1234的进程:
```bash
kill 1234
```
这会向进程发送SIGTERM(15)信号。如果进程不响应此信号,可以尝试发送SIGKILL(9)信号:
```bash
kill -9 1234
```
以上就是关于Linux下的`kill`命令的详细介绍,包括其基本概念、命令格式、功能以及如何使用等。通过理解和掌握这些知识点,可以更加有效地管理和控制Linux环境中的进程。