首页 > 编程笔记 > Linux笔记 阅读:99

Linux kill命令的用法(非常详细)

从字面来看,kill 就是用来杀死进程的命令。但是,根据不同的信号,kill 命令可以完成不同的操作,其格式如下:
[root@localhost ~]# kill [信号] PID
这里介绍一下常见的信号,如下表所示:

表:常见的进程信号
信号代号 信号名 说明
1 SIGHUP 该信号让进程立即关闭,在重新读取配置文件之后重启
2 SIGINT 程序终止信号,用于终止前台进程。相当于输出 Ctrl+C 快捷键
8 SIGFPE 在发生致命的算术运算错误时发出。不仅包括浮点运算错误,还包括溢出及除数为 0 等其他所有的算术运算错误
9 SIGKILL 用来立即结束程序的运行。该信号不能被阻塞、处理和忽略。一般用于强制终止进程
14 SIGALRM 时钟定时信号,计算的是实际的时间或时钟时间。alarm 函数使用该信号
15 SIGTERM 正常结束进程的信号,kill 命令的默认信号。如果进程已经发生了问题,那么这个信号是无法正常终止进程的,这时我们才会尝试使用 SIGKILL 信号,也就是信号 9
18 SIGCONT 该信号可以让暂停的进程恢复执行。该信号不能被阻断
19 SIGSTOP 该信号可以暂停前台进程,相当于输入 Ctrl+Z 快捷键。该信号不能被阻断
kill 命令是按照 PID 来确定进程的,因此 kill 命令只能识别 PID,不能识别进程名。下面举几个例子来说明一下 kill 命令。

【示例 1】标准 kill 命令。
# 启动 RPM 包默认安装的 Apache 服务
[root@localhost ~]# systemctl start httpd.service

# 查看 httpd 的进程树及 PID
# 使用 pstree 查询;grep 排除自身
[root@localhost ~]# pstree -p | grep httpd | grep -v "grep"
|-httpd(1472)-+-httpd(1473)
              |-httpd(1475)-+-{httpd}(1478)
              |-{httpd}(1479)
              |-{httpd}(1480)
              |-{httpd}(1481)
              |-{httpd}(1482)
              |-{httpd}(1483)
              |-{httpd}(1484)
              |-{httpd}(1485)
...省略部分输出...

【实例 2】杀死 PID 为 1513 的 httpd 进程,使用信号 9(强制):
[root@localhost ~]# kill -9 1513
[root@localhost ~]# pstree -p | grep httpd | grep -v "grep"
|-httpd(1472)-+-httpd(1473)
              |-httpd(1475)-+-{httpd}(1478)
                            |-{httpd}(1479)
                            |-{httpd}(1480)
                            |-{httpd}(1481)
                            |-{httpd}(1482)
                            |-{httpd}(1483)
                            |-{httpd}(1484)
                            |-{httpd}(1485)

【实例 3】使用信号 1 让主进程重新加载配置并重启子进程:
[root@localhost ~]# kill -1 1472
[root@localhost ~]# pstree -p | grep httpd | grep -v "grep"
|-httpd(1472)-+-httpd(1774)
              |-httpd(1775)-+-{httpd}(1818)
                            |-{httpd}(1819)
                            |-{httpd}(1820)
                            |-{httpd}(1821)
                            |-{httpd}(1822)
主 httpd 进程(1472)没变,子 httpd 进程的 PID 都更换了,说明 httpd 进程已重启一次。

相关文章