前面小节介绍了如何启动一个程序进程,还介绍了如何查看系统进程信息,本小节来介绍如何通过 kill
命令结束进程。
下面列举出 Linux 进程信号的描述:
信号 | 名称 | 描述 |
---|---|---|
1 | HUP | 挂起 |
2 | INT | 中断 |
3 | QUIT | 结束运行 |
9 | KILL | 无条件终止 |
11 | SEGV | 段错误 |
15 | TERM | 尽可能终止 |
17 | STOP | 无条件停止运行,但不终止 |
18 | TSTP | 停止或暂停,但继续在后台运行 |
19 | CONT | 在 STOP 或 TSTP 之后恢复执行 |
这里还是以之前启动的 nginx
进程为例,使用 ps
查看 nginx
命令如下:
ps -ef | grep nginx
执行结果如下图:
Tips:如图所示,可以看到有三条
nginx
相关信息信息,其中 PID 为12512
这一列表示的是当前打开窗口的进程,12471
和12472
这两个 PID 无法直接判断是否是之前启动nginx
服务的 PID,下面可以使用端口号去确认进程 PID。
所谓的端口,就好像是门牌号一样,客户端可以通过 ip 地址找到对应的服务器端,但是服务器端是有很多端口的,每个应用程序对应一个端口号,通过类似门牌号的端口号,客户端才能真正的访问到该服务器。为了对端口进行区分,将每个端口进行了编号,这就是端口号 。
nginx
软件服务启动之后默认的端口号是 80
,可以使用如下命通过 PID
查找到端口号,命令如下:
netstat -apn | grep 12471
执行结果如下:
Tips:如图所示,可以知道进程
PID = 12471
这个进程符合nginx
启动的端口号。
前面查找到进程的 PID
之后,可以使用 kill
命令杀死进程,命令如下:
- kill -9 12471
-
- ps -ef | grep nginx
执行结果如下图:
Tips:从图中可以看到,使用
kill -9
命令之后,可以杀掉PID = 12471
这个进程,12472
属于12471
的子进程,所以也会被一起杀掉,从前面的表中可以看到-9
表示无条件终止。
killall
命令可以直接通过进程相关的名称来结束进程,先启动 nginx
服务之后,然后使用 killall
杀掉 nginx
相关的进程,命令如下:
- service nginx start
-
- ps -ef | grep nginx
-
- killall nginx
-
- ps -ef | grep nginx
执行结果如下图:
Tips:实际业务中
killall
使用时需要谨慎,防止root
权限误操作误杀其他进程。
本小节介绍了进程通信信号描述,介绍了如何使用 ps
命令查看进程的 PID
,还介绍了如何使用 kill
和 killall
结束进程,其中 kill
是通过进程的 PID
来结束掉进程的,killall
可以通过进程名称来结束掉进程,另外还介绍了如何使用 PID
去查找该应用程序占用的端口号。