Mastering the “Kill” Command in Linux:https://www.maketecheasier.com/kill-command-in-linux

无论你使用哪种操作系统,你一定会遇到某个行为失常的应用,它把自己锁死并拒绝关闭。在Linux(还有Mac),你可以用一个"kill"命令强制终结它。在这个教程中,我们将展示给你多种方式使用"kill"命令终结应用。


Kill命令和信号

当你执行一个"kill"命令,你实际上发送了一个信号给系统,让它去终结不正常的应用。总共有60个你可以使用的信号,但是基本上你只需要知道SIGTERM(15)和SIGKILL(9)。

你可以用这个命令看到所有信号的列表:kill -l 

  • SIGTERM : 此信号请求一个进程停止运行。此信号是可以被忽略的。进程可以用一段时间来正常关闭,一个程序的正常关闭一般需要一段时间来保存进度并释放资源。换句话说,它不是强制停止。
  • SIGKILL : 此信号强制进程立刻停止运行。程序不能忽略此信号,而未保存的进度将会丢失。

使用"kill"的语法是:kill [信号或选项] PID(s) 
默认信号(当没有指定的时候)是SIGTERM。当它不起作用时,你可以使用下面的命令来强制kill掉一个进程:
        kill SIGKILL PID 
或者:
        kill -9 PID 
这里"-9"代表着SIGKILL信号。
如果你不知道应用的PID,仅需要运行这个命令:ps ux  或者 ps -aux 或者 ps -ef 
它会显示所有正在运行的应用还有应用的PID。

例如,要 kill 掉 Chrome,我会运行命令:kill -9 3629 
也可以在同一时间  kill 多个进程:kill -9 PID1 PID2 PID3 


PKill

"pkill" 命令是 “按名字” 杀掉进程。允许使用扩展的正则表达式和其它匹配方式。你现在可以使用应用的进程名kill掉它们,而不是使用PID。例如,要 kill 掉 Firefox 浏览器,只需要运行命令:pkill firefox 

使用正则表达式匹配的话,你可以输入进程名的部分字符,比如:pkill fire 

为了避免 kill 掉错误的进程,你应该用一下 " pgrep -l [进程名] " 列表来匹配进程名称。


Killall

killall 同样使用 进程名 替代 PID,并且它会 kill 掉所有的同名进程。例如,如果你正在运行多个Firefox浏览器的实例,可以用命令把它们全部 kill 掉:( killall 和 pkill 是相似的,不过如果给出的进程名不完整,killall 会报错。pkill 不需要完整的进程名就行)

结束 firefox 进程:killall firefox
在Gnome中,你可以使用这个命令重启 Nautilus:killall nautilus 


xkill

xkill 是图形方式kill一个应用。当你在终端键入"xkill",你的光标将立刻变成一个"十字"。你只需要做的是在不正常的应用上点击一下,它就会立刻kill掉这个应用。如果你经常用的话,你也可以添加一个键盘快捷键来激活xkill。


结论

当应用不正常而导致系统挂起的时候,人们往往重启计算机并且再一次开启所有的任务。而有了这些"kill"命令,你将能够更好的处理不正常的应用,从而避免导致系统崩溃。当你不想因一个不正常的进程而导致服务器宕机时,它尤其的有用。

实例

实例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:得到指定信号的数值
[root@localhost test6]# kill -l KILL
[root@localhost test6]# kill -l SIGKILL
[root@localhost test6]# kill -l TERM
[root@localhost test6]# kill -l SIGTERM
[root@localhost test6]#实例3:先用ps查找进程,然后用kill杀掉
[root@localhost test6]# ps -ef | grep vim
root      3268  2884  0 16:21 pts/1    00:00:00 vim install.log
root      3370  2822  0 16:21 pts/0    00:00:00 grep vim
[root@localhost test6]# kill 3268
[root@localhost test6]# kill 3268 实例4:彻底杀死进程
[root@localhost test6]# ps -ef | grep vim
root      3268  2884  0 16:21 pts/1    00:00:00 vim install.log
root      3370  2822  0 16:21 pts/0    00:00:00 grep vim
[root@localhost test6]# kill –9 3268
[root@localhost test6]# kill 3268 实例5:杀死指定用户所有进程
[root@localhost ~]# kill -9 $(ps -ef | grep peidalinux)
[root@localhost ~]# kill -u peidalinux实例6:init进程是不可杀的
[root@localhost ~]# ps -ef | grep init
root         1     0  0 Nov02 ?        00:00:00 init [3]
root     17563 17534  0 17:37 pts/1    00:00:00 grep init
[root@localhost ~]# kill -9 1
[root@localhost ~]# kill -HUP 1
[root@localhost ~]# ps -ef | grep init
root         1     0  0 Nov02 ?        00:00:00 init [3]
root     17565 17534  0 17:38 pts/1    00:00:00 grep init
[root@localhost ~]# kill -KILL 1
[root@localhost ~]# ps -ef|grep init
root         1     0  0 Nov02 ?        00:00:00 init [3]
root     17567 17534  0 17:38 pts/1    00:00:00 grep init
[root@localhost ~]#ps -ef  或者 ps aux        // 查看进程的方法:
kill -s 9 15572    或者    kill -9 15572    -s 9 指定传递给进程的信号是9即强制终止进程。假设15572用ps查到的火狐(firefox)的PID。kill -9, 这个强大和危险的命令迫使进程在运行时突然终止,进程在结束后不能自我清理。危害是导致系统资源无法正常释放,一般不推荐使用,除非其他办法都无效。 当使用此命令时,一定要通过ps -ef确认没有剩下任何僵尸进程。只能通过终止父进程来消除僵尸进程。如果僵尸进程被init收养,问题就比较严重了。杀死init进程意味着关闭系统。 如果系统中有僵尸进程,并且其父进程是init,而且僵尸进程占用了大量的系统资源,那么就需要在某个时候重启机器以清除进程表了。 进阶篇:改进 1 —— grep
把ps的查询结果通过管道传给grep,查找包含特定字符串的进程。
管道符“|”用来隔开两个命令,管道符左边命令的输出会作为管道符右边命令的输入。
例如: homer@ubuntu:~$ ps -aux | grep firefox
直接找到firefox进程PID, 输入: kill  -s  9  15572改进 2 —— pgrep
pgrep的p表明了这个命令是专门用于进程查询的grep
例如: homer@ubuntu:~$ pgrep firefox改进 3 —— pidof
pidof命令,表示 pid of xx,字面翻译过来就是 xx的PID。和pgrep相比稍显不足的是,pidof必须给出进程的全名。
例如: homer@ubuntu:~$ pidof firefox改进 4  —— kill + xargs
$ps -ef | grep firefox | grep -v grep | cut -c 9-15 | xargs kill -s 9
说明:
“grep firefox”的输出结果是,所有含有关键字“firefox”的进程。
“grep -v grep”是在列出的进程中去除含有关键字“grep”的进程。
“cut -c 9-15”是截取输入行的第9个字符到第15个字符,而这正好是进程号PID。
“xargs kill -s 9”中的xargs命令是用来把前面命令的输出结果(PID)作为“kill -s 9”命令的参数,并执行该命令。“kill -s 9”会强行杀掉指定进程。杀死进程的方式有以下几种:
a) ps -ef | grep firefox | grep -v grep | awk '{print $2}' | xargs kill -s 9
b) pgrep firefox | xargs kill -s 9
c) pidof firefox | xargs kill -s 9
或
d) kill -s 9 `ps -ef | grep firefox | grep -v grep | awk '{print $2}'`
e) kill -s 9 `pgrep firefox`
f) kill -s 9 `pidof firefox`改进 5
知道pgrep和pidof两个命令,干嘛还要打那么长一串!
$ pgrep firefox | xargs kill -s 9改进6 —— grep + awk
$ ps -ef | grep firefox | grep -v grep | awk '{print $2}' | xargs kill -9
其中awk '{print $2}' 的作用就是打印(print)出第二列的内容。
ps输出的第二列正好是PID。就把进程相应的PID通过xargs传递给kill作参数,杀掉对应的进程。改进7:
难道每次都要调用xargs把PID传递给kill?答案是否定的:
$kill -s 9 `ps -aux | grep firefox | awk '{print $2}'`改进8:
没错,命令依然有点长,换成pgrep。
$kill -s 9 `pgrep firefox`改进9——pkill:
pkill 类似于 pgrep, pkill 表示 pgrep+kill。即 pkill=pgrep+kill。
$pkill -9 firefox    // 或者 pkill firefox
说明:"-9" 即发送的信号是9,pkill与kill在这点的差别是:pkill无须 “s”,终止信号等级直接跟在 “-“ 后面。改进10——killall:
killall命令, 杀死同一进程组内的所有进程,其允许指定要终止的进程的名称,而非PID。
killall和pkill是相似的,不过如果给出的进程名不完整,killall会报错。
pkill或者pgrep只要给出进程名的一部分就可以终止进程。
$killall firefo
firefo: no process found
$killall firefox
$killall -9 firefoxkill
杀死进程最安全的方法是单纯使用kill命令,不加修饰符,不带标志。
例如: # kill -pid
注释: 标准的kill命令,默认采用信号(signal)号是15,通常都能达到目的,终止有问题的进程,并把进程的资源释放给系统。然而,如果进程启动了子进程,只杀死父进程,子进程仍在运行,因此仍消耗资源。为了防止这些所谓的“僵尸进程”,应确保在杀死父进程之前,先杀死其所有的子进程。  kill -l
例如: kill -l PID
-l 选项, 告诉kill命令用好像启动进程的用户已注销的方式结束进程。
当使用该选项时,kill命令也试图杀死所留下的子进程。但这个命令也不是总能成功--或许仍然需要先手工杀死子进程,然后再杀死父进程。 kill -HUP
有时候只想简单的停止和重启进程。
例如: # kill -HUP PID
该命令让Linux和缓的执行进程关闭,然后立即重启。
在配置应用程序的时候,这个命令很方便,在对配置文件修改后需要重启进程时就可以执行此命令。 

踢掉登录用户和用户进程

linux系统root用户可强制踢制其它登录用户
首先可用$w命令查看登录用户信息,显示信息如下:
[root@Wang ~]# w
10:01:23 up 1:23, 3 users, load average: 0.71, 0.58, 0.57
USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
root     tty2     -                09:59    1:53   0.01s 0.01s -bash
root     pts/0    :0.0             10:01    0.00s 0.03s 0.00s w
wangbo   pts/2    192.168.0.196    09:42   18:50   0.01s 0.01s -bash
[root@Wang ~]#pkill -kill -t pts/1[root@Wang ~]# ps -ef | grep pts/0
root     15846 15842 0 10:04 pts/0    00:00:00 bash
root     15876 15846 0 10:06 pts/0    00:00:00 ps -ef
root     15877 15846 0 10:06 pts/0    00:00:00 grep pts/0
踢掉用户的命令:
kill -9 15846结束掉某个用户的所有进程。初学者一般会先查询出用户的所有pid,然后一条条kill结束掉,或者写一个脚本。
实际上结束的方法有很多,这边总结了下面4种方法,以kill用户zhangnq为例。
1. pkill方式
# pkill -u zhangnq
2. killall方式
# killall -u zhangnq
3. ps方式 ps列出zhangnq的pid,然后依次kill掉,比较繁琐。
# ps -ef | grep zhangnq | awk '{ print $2 }' | xargs kill -9
4. pgrep方式 pgrep -u参数查出用户的所有pid,然后依次kill
# pgrep -u zhangnq | xargs kill -9

kill 和 pgrep 和 pidof 和 awk 和 pkill 和 killall相关推荐

  1. linux 命令:grep、egrep、ngrep、kill、pkill、killall

    1.grep 帮助:grep --help 用法:grep [OPTION]...patterns[FILE]... 示例:grep -i 'hello world' menu.h main.c    ...

  2. Ubuntu终止进程的方法(kill、pkill、killall)

    Ubuntu终止进程的方法(kill.pkill.killall) 博客分类:Ubuntu / Mac / Github / Aptana / Nginx / Shell / Linux 用户退出: ...

  3. 详解linux杀死进程方法:kill、pkill、killall之间的区别及用法!

    详解linux杀死进程方法:kill.pkill.killall之间的区别及用法! kill 命令 killall 命令 pkill 命令 kill.pkill.killall之间的区别 kill 命 ...

  4. Linux中kill,pkill,killall和xkill命令汇总讲解

    终止一个进程或终止一个正在运行的程式,一般是通过 kill .killall.pkill.xkill 等进行.比如一个程式已死掉,但又不能退出,这时就应该考虑应用这些工具. 另外应用的场合就是在服务器 ...

  5. linux上杀死进程命令:kill、pkill、killall杀死进程

    1 kill:根据进程号(PID)杀死进程 在linux上,一般常用的杀死进程的命令是kill,但是也有缺陷,下面说 1.查看指定名称的进程,如下我查看运行python程序的进程 python aux ...

  6. 十二 个经典 Linux 进程管理命令介绍

    From:http://blog.chinaunix.net/uid-25681671-id-3201927.html 进程和作业管理命令:http://man.linuxde.net/sub/进程和 ...

  7. kill -9 `ps -ef|grep cpu|grep -v grep|awk '{print $2}'`命令解析

    1.场景 在一个Linux机器上起了很多个cpu.sh的脚本,如下图,想一次性把他们kill掉 2.方法 2.1去除grep cpu 上图中可以看到最后一个pid为22603的进程是grep cpu进 ...

  8. ps -ef|grep cpu|grep -v grep 查看进程情况并去掉grep

    ps -ef|grep cpu|grep -v grep 1.场景 在一个Linux机器上起了很多个cpu.sh的脚本,如下图,想一次性把他们kill掉 2.方法 2.1去除grep cpu 上图中可 ...

  9. (Linux)kill命令常用技巧

    前言 在Linux的系统中,kill是我们最常见的命令之一. kill,英语中为杀死的意思,顾名思义,就是用来杀死一些东西的命令,用来杀死系统中的进程.就像是Windows系统中的关闭软件的按钮或任务 ...

最新文章

  1. 中国研究的超级系统计算机,学习电脑 - Book3 - V1.30 - 超级系统恢复
  2. JS Math对象中一些小技巧
  3. halt库卡_KUKA库卡机器人编程之字符串处理函数
  4. ubuntu编译android4.0
  5. Linux 下编译并运行C语言程序
  6. 理解C#泛型运作原理
  7. cod16 服务器正在维护,使命召唤16玩不了怎么办 使命召唤16进不去解决方法
  8. 9203精英挑战赛注意事宜 一
  9. 乐橙等待登录返回超时_等待登录返回超时什么意思
  10. sccm2012 客户端推送安装故障解决一例
  11. 安装go编译器后没有gopath文件夹_Go 语言环境安装(集成 VS code)
  12. Too many authentication failures for
  13. 大电流场效应管500a_不可不知的电子工程常用的6大电子元器件,了解一下!
  14. Mocha: 58同城 App 基于卡片的线上 AB 测(线上卡片动态换)
  15. 陕西国防学院计算机系网络教研室,陕西国防工业职业技术学院:全卫强副院长赴各院部调研教师发展工作...
  16. 去掉word中的页眉
  17. 计算机组成原理 课程设计报告
  18. 新一代手机声音传音器THA-2开始发售,大家快来体验吧!
  19. 让极客精神成为自然:DefCon China看这一篇就够了
  20. SpringBoot2整合ElasticSearch(包含ElasticSearch入门+spring-boot-starter-data-elasticsearch)

热门文章

  1. YUI事件体系之Y.CustomEvent
  2. 漆桂林 | 知识图谱的应用
  3. 算法工程师笔试 -剑指offer-习题详细解答
  4. SSM:web目录下有的jsp和图片不能显示,有的可以显示的解决方法
  5. SpringMVC详细执行流程与组件说明
  6. case函数,replace函数
  7. Ngui之UI框架的层级处理
  8. 考虑玩家移动速度的射击
  9. 学会怎样使用Jsp 内置标签、jstl标签库及自定义标签
  10. asp.net(C#)写SQL语句技巧