shell学习五十二天----删除进程kill命令

进程的控制与删除

使用kill命令可以终止进程.通常,终止一个前台进程可以使用ctrl+C,但是对于一个后台进程就必须使用kill命令来终止,我们需要先使用ps/pidof/pstree/top等工具获取进程PID,然后使用kill命令来杀掉进程.kill命令是通过向进程发送指定的信号来结束相应进程的.在默认情况下,采用编号为15TREM信号.TERM信号将终止所有不能获取该信号的进程.对于那些可以获取该信号的进程就要用编号为9kill信号,强行”杀掉”该进程.

 

kill命令详解

1.格式:

kill [参数] [进程号,也就是PID]

2.功能:

发送指定的信号到相应进程.不指定型号将发送SIFTERM(15)终止指定进程.如果无法终止该进程可以使用”-KILL”参数,其发送的信号为SIGKILL(9),将强制结束进程,使用ps命令或者jobs命令可以查看进程号.root用户将影响用户的进程,root用户只能影响自己的进程.

3.参数

参数

说明

-l(小写字母)

信号,如果不加信号的编号参数,则使用”-l”参数会列出全部的信号名称

-a

当初李当前进程是,不限制命令名或进程号的对应关系

-p

指定kill命令只打印相关进程的进程号,而不发送任何信号

-s

指定发送信号

-u

指定用户

 

注意:

1.kill命令可以带信号号码选项,也可以不带.如果没有信号好吗,kill命令就会发出终止信号(15),这个信号可以被进程捕获,是的进程在推出之前可以清理并释放资源.也可以用kill向进程发送特定的信号.例如:

kill -2 123  //它的效果等同于在前台运行PID123的进程同时按下Ctrl+C.但是,普通用户只能使用不带signal参数的kill命令或最多使用-9信号.

 

2.kill可以带有进程ID号作为参数.当用kill想这些进程发送信号时,必须是这些进程的主人.如果试图撤销一个没有撤销权限的进程或撤销一个不存在的进程,就会得到一个错误信息.

3.可以向多个进程发信号或终止它们.

4.当kill成功的发送了信号后,shell会在屏幕上显示出进程的终止信息.有时这个信息不会马上显示,只有当按下Enter键使shell的命令提示符再次出现时,才会显示出来.

5.应注意,信号使进程强行终止,这常会带来一些副作用,如数据丢失后者终端无法恢复到正常状态.发送信号时必须小心,只有在万不得已时,采用kill信号(9),因为进程不能首先捕获它要撤销所有的后台作业,可以输入kill 0.因为有些在后台运行的命令会启动多个进程,跟踪并找到所有要杀掉的进程的PID是件很麻烦的事.这时,使用kill 0来终止所有当前shell启动的进程,是个有效的方法.

 

 

 

4.案例

案例1:

#kill -l //列出所有的信号名称

在输出中,只有第9种信号(SIGKILL)才可以无条件终止进程,其他信号进程都有权利忽略.以下是常用的信号:

信号名称

编号

说明

HUP

1

终端断线

INT

2

中断(Ctrl+C)

QUIT

3

退出(Ctrl)

TERM

15

终止

KILL

9

强制终止

CONT

18

继续(STOP相反,fg/bg命令)

STOP

19

暂停(Ctrl+Z)

 

 

案例2:得到指定信号的数值(不区分大小写)

#kill -l term

15

#kill -l kill

9

#kill -l SIGKILL

 

 

案例3:配合ps命令,使用kill杀掉进程

#ps -ef | grep vim  //得到关于vim进程的PID,比如得到的PID111

#kill 111  //删除vim进程

 

案例4:彻底杀死进程

#kill -9 111

案例5:杀死指定用户的所有进程

#kill -9 $(ps -ef| grep username)   //方法1

#kill -u username //方法2

 

案例6:init进程(PID1)是不可杀的

#kill -9 1

这是因为initlinux系统中不可缺少的程序之一 .所谓的init进程,他是一个有内核启动的用户级进程.内核自行启动(已经被载入内存,开始运行,并已初始化所有的设备驱动程序和数据结构等)之后,就通过启动一个用户级程序init的方式,完成引导进程.所以,init时钟是第一个进程(其进程编号始终为1).其他所有进程都是init进程的子孙.init进程是不可杀死的.不够貌似init进程的作用正在被逐渐弱化.  

你可能感兴趣的:(shell)