(Linux)kill命令详解

前言


在Linux的系统中,kill是我们最常见的命令之一。
kill,英语中为杀死的意思,顾名思义,就是用来杀死一些东西的命令,用来杀死系统中的进程。就像是Windows系统中的关闭软件的按钮或任务管理器的结束任务,不过kill最直接,从后台直接停止。

下面就介绍一下,kill是如何杀死进程的。



kill命令的参数


在Linux系统中命令都是有参数的,这给了我们很多的选择,但是kill的重点不在于参数而是信号,下面就是kill的一些参数(简单了解即可)

-a 当处理当前进程时,不限制命令名和进程号的对应关系
-Z 只杀死拥有scontext 的进程
-e 要求匹配进程名称
-I 忽略小写
-g 杀死进程组(不是进程)
-i 杀死进程前会先询问用户
-l 列出所有的已知信号名称
-q 禁止输出警告信息
-s 发送指定的信号
-v 显示报告信号是否成功发送
-w 等待进程死亡
-u 指定用户
–version 显示版本显示



kill的信号


kill命令的实现是通过发送指定的信号到相应进程来实现的,就像是电视遥控器一样。一般先用ps 或top命令查到进程的id,再使用kill杀死。


【1】格式: kill + 信号 + 进程号

(kill是简洁的,一般直接加上信号和进程id,直接杀死,命令的参数反而不常用)


【2】常用kill的信号

kill -l 即可查出kill的所有的信号(共有64种)

这里写图片描述

但是常用的只有9种信号:

<1> 1 终端断线

<2>2 中断(等同 Ctrl + C)

<3>3 退出(同 Ctrl + \)

<4>15 终止(可以使得进程在退出之前清理并释放资源)

<5> 9 强制终止

<6>18 继续(与19相反)

<7>19 暂停(等同 Ctrl + Z)



kill的实际应用

kill只可杀死单个进程;pkill和killall可杀死多个进程


【1】彻底杀死进程

当我们杀掉父进程时,其下的子进程也会被杀死
kill -9 常用来杀死僵尸进程

格式:kill -9 进程id

<1>查出服务的进程id
ps aux |grep httpd

<2>杀死进程(3645为查到的进程id)
kill -9 3645


【2】杀死程序

程序的运行会产生进程,所以可以通过杀死进程来关闭程序,可以使用kill来实现,但是,kill只可杀死单个进程,如果一个一个杀,有点费时间(也可 ps aux |grep httpd | xargs kill -9 )。

我们这时就可以通过pkill和killall来实现,杀死程序。

<1>直接杀死程序(httpd为程序名)
pkill -9 httpd

killall -9 httpd


【3】强制踢掉登陆用户

有的时候,可能我们的系统中有很多用户在同时登陆这一台服务器,而我们想要踢掉某个不良用户,就可以执行如下操作。

<1>查看用户登陆信息
w

这里写图片描述

<2>查看自己的身份(避免把自己踢掉)
who am i

<3>踢掉用户ats

pkill -kill -t pts/2(按终端踢,pts/2为所踢用户的终端)

pkill -u ats(按用户名踢,ats为用户名)



kill的注意事项

1.如果kill时,不指定信号就会默认发送信号15,终止指定进程,使得进程在退出之前清理并释放资源。

2.使用kill时,root用户将影响用户的进程,非root用户只能影响自己的进程。

3.使用kill时,当kill向进程发送信号,必须是这些进程的主人。如果杀死一个没有权限杀死的进程或杀死一个不存在的进程,就会报错。如下:
-bash: kill: (20) - No such process

4.使用kill时,如果成功地发送了信号,shell会在屏幕上显示出进程的终止信息。(按下Enter键,就会显示出来)

5.使用kill时,如果使用信号9,使进程强行终止,可能会使数据丢失或者终端无法恢复到正常状态。

6.init进程,它是一个由内核启动的用户级进程,所有进程都是init进程的子孙,init不可杀。

猜你喜欢

转载自blog.csdn.net/gx_1_11_real/article/details/80534793
今日推荐