在工作中,我常常需要终止有问题的进程,一般通过程序的关闭命令把进程关闭掉,这是最安全的方法,但是有些时候,我们无法通过关闭命令把进程结束掉,这时就需要通过杀死进程的方法来结束这个有问题的进程。而杀进程的方法有很多,常见的有killkillallpkill等。最安全的方法是单纯使用kill命令。

1kill

使用kill命令需要我们先查到进程的PID,方法:

ps auxf#查到我们需要杀掉的进程PID,由于进程较多,我们通常使用:

ps auxf|grep 进程名

例如:杀掉rpcbind进程

blob.png

Kill杀掉掉rpcbind进程,只杀死父进程,但是子进程还存在,因此仍消耗资源,为了节约系统资源,以及防止僵尸进程,我们应该在杀死父进程之前,先杀死其所有的子进程

必杀技 kill -9 PID-9kill信号)

此命令是比较危险的,不建议使用,有可能会是系统崩溃,或者系统关机等风险。

信号对照表:

数字

信号

描述

1

HUP

挂起,用来在终端丢失连接的时候通报

2

INT

中断,当用户点击中断(Ctrl+C)的时候发送

3

QUIT

退出(Ctrl+\),会生成内存转储

4

ILL

执行了非法指令. 通常是因为可执行文件本身出现错误, 或者试图执行数据段. 堆栈溢出时也有可能产生这个信号

5

TRAP

由断点指令或其它trap指令产生,由debugger使用

6

ABRT

通过C函数abort()发送,为assert()使用

7

BUS

非法地址, 包括内存地址对齐(alignment)出错。比如访问一个四个字长的整数, 但其地址不是4的倍数。它与SIGSEGV的区别在于后者是由于对合法存储地址的非法访问触发的(如访问不属于自己存储空间或只读存储空间)

8

FPE

在发生致命的算术运算错误时发出,不仅包括浮点运算错误,   还包括溢出及除数为0等其它所有的算术的错误

9

KILL

迅速完全终止进程,不能被捕获,本信号不能被阻塞、处理和忽略

10

USR1

用户定义的信号1

11

SEGV

试图访问未分配给自己的内存, 或试图往没有写权限的内存地址写数据

12

USR2

用户定义的信号2

13

PIPE

管道破裂。这个信号通常在进程间通信产生,比如采用FIFO(管道)通信的两个进程,读管道没打开或者意外终止就往管道写,写进程会收到SIGPIPE信号。此外用Socket通信的两个进程,写进程在写Socket的时候,读进程已经终止

14

ALRM

时钟定时信号, 计算的是实际的时间或时钟时间。alarm函数使用该信号

15

TERM

常规的终止进程,可以被阻塞和处理

16

STKFLT

(TODO)

17

CHLD

一个子进程刚刚终止或者改变状态

18

CONT

用SIGSTOP终止后继续运行

19

STOP

中断进程,不能被捕获(Ctrl+Z)

20

TSTP

中断进程,可以被捕获

21

TTIN

当后台作业要从用户终端读数据时, 该作业中的所有进程会收到SIGTTIN信号。缺省时这些进程会停止执行

22

TTOU

类似于SIGTTIN, 但在写终端(或修改终端模式)时收到

23

URG

有"紧急"数据或out-of-band数据到达socket时产生

24

XCPU

CPU超时,这个限制可以由getrlimit/setrlimit来读取/改变

25

XFSZ

文件大小超过限度

26

VTALRM

虚拟时钟信号。类似于SIGALRM, 但是计算的是该进程占用的CPU时间

27

PROF

类似于SIGALRM/SIGVTALRM, 但包括该进程用的CPU时间以及系统调用的时间

28

WINCH

窗口大小改变时发出

29

POLL

(IO)文件描述符准备就绪, 可以开始进行输入/输出操作

30

PWR

Power failure

31

SYS

非法的系统调用

 

2killall命令

该命令是杀死一个进程组的所有进程,指定要终止的进程的名字,而不是PID

例如:杀死apache进程

killall httpd

3pkill命令

该命令可以按照进程名杀死进程。pkillkillall应用方法差不多,也是直接杀死运行中的程序;如果您想杀掉单个进程,请用kill来杀掉。

语法

pkill(选项)(参数)

选项

-o:仅向找到的最小(起始)进程号发送信号;

-n:仅向找到的最大(结束)进程号发送信号;

-P:指定父进程号发送信号;

-g:指定进程组;

-t:指定开启进程的终端。

例:

pkill httpd