(3)杀死进程
(3.1)为什么要杀死进程
在系统运行期间,若发生了如下情况,就需要将这些进程杀死。
Ø 进程占用了过多的CPU时间。
Ø 进程锁住了一个终端,使其他前台进程无法运行。
Ø 进程运行时间过长,但没有预期效果或无法正常退出。
Ø 进程产生了过多的到屏幕或磁盘文件的输出。
(3.2)进程信号
进程信号是在软件层次上对中断机制的一-种模拟,在原理上,- 一个进程收到一个信号与 处理器收到一个中断请求可以说是一样的。进程信号是最基本的进程间通信方式:可以在进程 之间直接发送,而不需要用户界面;可以在Shell中通过kill命令发送给进程。
Linux对每种进程信号都规定了默认关联动作。可以使用如下命令查看可用的进程信号及 其详细信息。
$kill -l
$ man 7 signal
下表中列出了--些常用进程信号的说明。
常用进程信号说明 | ||
信号 | 数值 | 用途 |
SIGHUP | 1 | 重读配置文件 |
SIGINT | 2 | 从键盘上发出的强行终止信号(Curl C) |
SIGKILL | 9 | 结束接收信号的进程(强行杀死进程) |
SIGTERM | 15 | 正常的终止信号(默认) |
(3.3)可以发送进程信号的命令
下表中列出了常用的发送进程信号的命令。
命 令 | 说 明 |
kill | 通过指定进程的PID为进程发送进程信号 |
killall | 通过指定进程的名称为进程发送进程信号 |
pkill | 通过模式匹配为指定的进程发送进程信号 |
可以使用上述命令为进程发送SIGTERM(15)或SIGKILlL(9)信号杀死进程。
(3.4)杀死进程举例
下面给出一些杀死进程的例子。
操作步骤3.14杀死进程的例子
//杀死指定PID的进程(若已知进程的PID为12345)
#kill 12345
#kill -9 12345 //强行杀死
//杀死指定进程名的所有进程
$ killall myprogram
$ pkill myprogram
//强行杀死指定进程名的所有进程
# killall -9 rsync
#pkill -9 rsync
//杀死通过模式匹配指定的所有进程
# pkill -9 -u osmond //强行杀死osmond用户的所有进程
# pkill -u root sshd //杀死root用户运行的所有sshd进程
# pkill -u root,daemon //杀死root用户或daemon用户运行的所有进程
# pkill G student //杀死student组运行的所有进程
//通过pidof/pgrep 命令获取进程PID,并组合使用kill命令将其杀死
# kill -9 $(pidof wget)
# kill -9 $(pgrep wget)
# kill -9 $(pgrep -u apache httpd)
# pgrep -u apache httpd| xargs kill -9
注意:
1.killall使用进程名称而不是PID,所以所有的同名进程都将被杀死。
2. pkill/pgrep在杀死进程时应使用精确匹配(-x),以免殃及池鱼。