在工作中,我常常需要终止有问题的进程,一般通过程序的关闭命令把进程关闭掉,这是最安全的方法,但是有些时候,我们无法通过关闭命令把进程结束掉,这时就需要通过杀死进程的方法来结束这个有问题的进程。而杀进程的方法有很多,常见的有kill、killall、pkill等。最安全的方法是单纯使用kill命令。
1、kill
使用kill命令需要我们先查到进程的PID,方法:
ps auxf#查到我们需要杀掉的进程PID,由于进程较多,我们通常使用:
ps auxf|grep 进程名
例如:杀掉rpcbind进程
Kill杀掉掉rpcbind进程,只杀死父进程,但是子进程还存在,因此仍消耗资源,为了节约系统资源,以及防止“僵尸进程”,我们应该在杀死父进程之前,先杀死其所有的子进程。
必杀技 kill -9 PID(-9是kill信号)
此命令是比较危险的,不建议使用,有可能会是系统崩溃,或者系统关机等风险。
信号对照表:
数字 | 信号 | 描述 |
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 | 非法的系统调用 |
2、killall命令
该命令是杀死一个进程组的所有进程,指定要终止的进程的名字,而不是PID。
例如:杀死apache进程
killall httpd
3、pkill命令
该命令可以按照进程名杀死进程。pkill和killall应用方法差不多,也是直接杀死运行中的程序;如果您想杀掉单个进程,请用kill来杀掉。
语法
pkill(选项)(参数)
选项
-o:仅向找到的最小(起始)进程号发送信号;
-n:仅向找到的最大(结束)进程号发送信号;
-P:指定父进程号发送信号;
-g:指定进程组;
-t:指定开启进程的终端。
例:
pkill httpd