Linux平台及应用
潘小玲 郑国华 丁敏

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

杀死进程

发布时间:2020-04-19 20:43   发布人:潘小玲   浏览次数:446

(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),以免殃及池鱼。