注:本文为 “Linux kill、killall、pkill” 相关几篇文章合辑。
未整理去重。
kill、killall、pkill、kill -9 区别
区别
进程 ID 唯一,所以 kill 一次只能杀死 1 个进程,其他相同名称的进程仍然存在,而 pkill 和 killall,则可以一次杀死所有拥有相同名称的进程.
killall 和 kill
killall 命令用于杀死指定名字的进程
kill 命令用于杀死指定进程 ID 的进程
killall 相当于 查询进程 ID+ kill 进程 ID 两步合一
killall = 1) ps -aux | grep name 得出 pid;2) kill pid
pkill 和 kill
pkill 和 kill 用法相同,不同的地方在于 kill 指定的进程 ID,pkill 指定的是进程名
pkill -signal process_name, signal 和 kill 一样也是默认 15,强制的话也是指定 9
kill -9 process_id 等同 pkill -9 process_name
(kill -9 pidof process_name
等同 pkill -9 process_name)
pkill 和 killall
killall 和 pkill 的用法几乎相同,但 pkill 可以指定非完整名称,而 killall 则必须指定完整进程名称
kill 和 kill -9
kill -9 就是 kill 指定了信号 9
kill 不指定信号,则默认是发送 15
即:kill = kill -15
kill -15,15 信号通知进程退出,进程在退出之前可以清理并释放资源。9 信号直接杀死进程,只有在万不得已时,才用 kill 信号 (9), kill -2 = CTRL+C
相关参数
killall 命令
killall [参数][进程名]
-Z 只杀死拥有 scontext 的进程
-e 要求匹配进程名称
-I 忽略小写
-g 杀死进程组而不是进程
-i 交互模式,杀死进程前先询问用户
-l 列出所有的已知信号名称
-q 不输出警告信息
-s 发送指定的信号
-v 报告信号是否成功发送
-w 等待进程死亡
--help 显示帮助信息
--version 显示版本显示
例如:
1:杀死所有同名进程
killall nginx
killall -9 bash
2. 向进程发送指定信号
killall -TERM ngixn 或者 killall -KILL nginx
kill 命令
kill [参数][进程 id]
命令参数
-l 信号,若果不加信号的编号参数,则使用 “-l” 参数会列出全部的信号名称
-a 当处理当前进程时,不限制命令名和进程号的对应关系
-p 指定 kill 命令只打印相关进程的进程号,而不发送任何信号
-s 指定发送信号
-u 指定用户
1、kill 命令可以带信号号码选项,也可以不带。如果没有信号号码,kill 命令就会发出终止信号 (15),这个信号可以被进程捕获,使得进程在退出之前可以清理并释放资源。也可以用 kill 向进程发送特定的信号。例如:
kill -2 123
它的效果等同于在前台运行 PID 为 123 的进程时按下 Ctrl+C 键。但是,普通用户只能使用不带 signal 参数的 kill 命令或最多使用 - 9 信号。
2、kill 可以带有进程 ID 号作为参数。当用 kill 向这些进程发送信号时,必须是这些进程的主人。如果试图撤销一个没有权限撤销的进程或撤销一个不存在的进程,就会得到一个错误信息。
3、可以向多个进程发信号或终止它们。
4、当 kill 成功地发送了信号后,shell 会在屏幕上显示出进程的终止信息。有时这个信息不会马上显示,只有当按下 Enter 键使 shell 的命令提示符再次出现时,才会显示出来。
5、应注意,信号使进程强行终止,这常会带来一些副作用,如数据丢失或者终端无法恢复到正常状态。发送信号时必须小心,只有在万不得已时,才用 kill 信号 (9),因为进程不能首先捕获它。
要撤销所有的后台作业,可以输入 kill 0。因为有些在后台运行的命令会启 动多个进程,跟踪并找到所有要杀掉的进程的 PID 是件很麻烦的事。这时,使用 kill 0 来终止所有由当前 shell 启动的进程,是个有效的方法。
范例
实例 1:列出所有信号名称
\# kill -l
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL
5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE
9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2
13) SIGPIPE 14) SIGALRM 15) SIGTERM 16) SIGSTKFLT
17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU
25) SIGXFSZ 26) SIGVTALRM 27) SIGPROF 28) SIGWINCH
29) SIGIO 30) SIGPWR 31) SIGSYS 34) SIGRTMIN
35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3 38) SIGRTMIN+4
39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12
47) SIGRTMIN+13 48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14
51) SIGRTMAX-13 52) SIGRTMAX-12 53) SIGRTMAX-11 54) SIGRTMAX-10
55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7 58) SIGRTMAX-6
59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
63) SIGRTMAX-1 64) SIGRTMAX
说明:
只有第 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 KILL
9
\# kill -l SIGKILL
9
\]# kill -l TERM
15
\# kill -l SIGTERM
15
实例 3:先用 ps 查找进程,然后用 kill 杀掉
\# 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
\# kill 3268
实例 4:彻底杀死进程
\# kill –9 3268 //-9 强制杀掉进程
ps: init 是 Linux 系统操作中不可缺少的程序之一。所谓的 init 进程,它是一个由内核启动的用户级进程。内核自行启动 (已经被载入内存,开始运行,并已初始化所有的设备驱动程序和数据结构等) 之后,就通过启动一个用户级程序 init 的方式,完成引导进程。所以,init 始终是第一个进程 (其进程编号始终为 1)。 其它所有进程都是 init 进程的子孙。init 进程是不可杀的!
pkill 命令
pkill 和 killall 应用方法差不多,pkill 可以指定非完整名称,而 killall 则必须指定完整进程名称。
kill、killall、pkill 命令区别
Cape0915 于 2017-11-12 17:33:39 发布
首先可以通过 ps aux 查看系统有哪些进程正在运行。
- 用 kill 来杀死某一个进程
kill,加选项 - 9,加 PID,表示杀死进程编号为 PID 的这个进程
-1 重启
\# kill -9 PID
杀死进程 PID 为 2899 的进程
\# kill -9 2899123456
- 用 killall 杀死一类进程
#killall,加选项 - 9,加服务名, 表示杀死该服务的所有进程
-1 重启
\# killall -9 service
杀死 httpd 服务的所有进程
\# killall -9 httpd 123456
- 用 pkill 踢出某个终端
pkill,加选项 -9,加终端号,表示踢出该终端的所有进程
-1 SIGHUP 重载配置
\# pkill -9 pts/0
终止远程登录终端 pts/0 上的所有进程
[root@localhost ~]# pkill -9 pts/0
精通 Linux “kill” 命令
译者:flsf
校对:wxy
| 2013-10-17 22:25
无论你使用哪种操作系统,你一定会遇到某个行为失常的应用,它把自己锁死并拒绝关闭。在 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
它会显示所有正在运行的应用还有应用的 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 firefox
在 Gnome 中,你可以使用这个命令重启 Nautilus:
killall nautilus
xkill
xkill 是图形方式 kill 一个应用。当你在终端键入 “xkill”,你的光标将立刻变成一个 “十字”。你只需要做的是在不正常的应用上点击一下,它就会立刻 kill 掉这个应用。如果你经常用,也可以添加一个键盘快捷键来激活 xkill.。
结论
当应用不正常而导致系统挂起的时候,往往重启计算机并且再一次开启所有的任务。而有了这些 “kill” 命令,你将能够更好的处理不正常的应用,从而避免导致系统崩溃。当你不想因一个不正常的进程而导致服务器宕机时,它尤其的有用。
在 Linux 中找到一个进程 ID 并杀死它
作者:Arindam
译者: LCTT yzuowei
| 2022-12-12 10:39
一个简单的教学展示,如何找到正在运行中的进程 ID 并杀死它,可以使用终端或者 GUI,这个方法适用于各类 Linux 发行版。
你的 Linux 系统中运行的应用可能会让你的电脑变慢,特别是你的电脑配置较低的时候。在 Linux (以及所有其他 OS)中,程序或者应用都携带一个特别的 PID (进程 ID)可供你简单地分辨它们。
然而,大部分 Linux 初学者用户并不知道如何在 Linux 中寻找运行中的进程并杀死它。在这篇指南中,我们将会解释用不同的方法以杀死 Linux 中的运行进程。这包括了使用终端和 GUI 的方法。
记住,你只应该杀死未响应的进程,或者你发现应用无法被正常关闭 (针对基于 GUI 的应用)。
找到正在运行中的进程
你可以使用命令 top
来列出所有正在进行中的进程和它们的 PID,以及其他细节。程序 top
在所有 Linux 发行版和所有基于 Unix 的系统中都是默认安装了的。
top
同样地,你可以执行命令 ps
附带额外选项来获取某个指定的进程的 PID。例如,你可以使用以下命令来获得 firefox
的 PID。
ps -el | grep -i firefox
ps
:表示 “process status”,用于显示当前系统的进程状态。-e
:显示所有用户的进程,等同于-A
。-l
:显示长格式的输出,提供更多的详细信息。
现在你已经找到 PID 了,让我们看看你该如何杀掉它。
杀死运行中的进程
使用以下命令,你可以通过进程的名字或者 PID 来杀掉这个正在运行中的进程:
killall
:通过运行进程的名字来杀死进程kill
:通过 PID 来杀死进程
现在,让我们首先使用进程 killall
通过 Firefox 这个名字来杀死它的,命令如下:
killall -9 firefox
- 参数
-9
发送了信号SIGKILL
通知 OS 来终止这个进程。 - 使用以下命令,你也可以列出一些别的信号。
kill -l
同样地,如果你想要通过 PID 来杀死进程,你可以用以下命令:
kill -9 <PID>
在这个例子中,命令会长这样:
kill -9 33665
让我们看看在不同发行版中,你该如何使用图形用户界面(GUI)来杀死任意进程或应用。
通过 GUI 寻找 PID 并杀掉
现在有很多图形界面程序可以枚列进程。大部分 Linux 发行版的桌面环境中已经携带了它们。我们在这里列举出了一些。
GNOME(在 Ubuntu、Fedora 工作站等) & 在 Linux Mint 中
在应用菜单中搜索 “system monitor” 并打开它(LCTT 译注:中文桌面环境也可以搜 “system monitor”,我在 Ubuntu 里试过了)。在 “进程 Processes” 标签页下找到你的进程,右击进程名字打开快捷菜单,选择选项 “杀死 Kill”。
KDE Plasma(Kubuntu、Fedora-KDE 或任何基于 Plasma 的发行版)
在应用菜单中搜索并启动 “system monitor”。这会打开以下程序。在左边菜单栏点击 “进程 Processes” ,你因该能看见一列正在运行的程序。你可以右击列表里的进程或应用并选择 “杀死 Kill” 来终止进程。
Xfce 桌面
Xfce 桌面可以完成这项任务的原生应用是 任务管理器 Task Manager,你可以通过 “应用 Application > 系统 System > 任务管理器 Task manager” 来找到它。右击进程名字然后选择 “杀死 Kill” 来终止应用或进程。
如何在其他桌面或发行版上杀死一个进程或程序
如果你找不到任何相似的程序,你可以选择使用终端的方法。或者,你可以使用以下命令来安装 gnome-system-monitor。
Ubuntu 以及相关发行版:
sudo apt install gnome-system-monitor
Fedora 以及其相关的发行版:
sudo dnf install gnome-system-monitor
还有 Arch Linux:
sudo pacman -S gnome-system-monitor
总结一下
我们已经解释了如何在 Linux 中找到一个运行中的进程的 PID 并杀死它的不同方法:你可以通过名字或者 PID 来杀死进程。希望这对你有所帮助。
杀掉僵尸进程
作者:Linuxandubuntu
译者: LCTT DarkSun
| 2017-12-14 22:30
僵尸进程(Zombie Processes)
进程的工作原理:启动一个程序,开始任务,然后等任务结束了,停止这个进程。进程停止后,该进程就会从进程表中移除。
你可以通过 System-Monitor
查看当前进程。
但是,有时候有些程序即使执行完了也依然留在进程表中。
那么,这些完成了生命周期但却依然留在进程表中的进程,我们称之为 “僵尸进程”。
它们是如何产生的?
当你运行一个程序时,它会产生一个父进程以及很多子进程。所有这些子进程都会消耗内核分配给它们的内存和 CPU 资源。
这些子进程完成执行后会发送一个 Exit 信号然后死掉。这个 Exit 信号需要被父进程所读取。父进程需要随后调用 wait
命令来读取子进程的退出状态,并将子进程从进程表中移除。
若父进程正确第读取了子进程的 Exit 信号,则子进程会从进程表中删掉。
但若父进程未能读取到子进程的 Exit 信号,则这个子进程虽然完成执行处于死亡的状态,但也不会从进程表中删掉。
僵尸进程对系统有害吗?
不会。由于僵尸进程并不做任何事情,不会使用任何资源也不会影响其它进程,因此存在僵尸进程也没什么坏处。不过由于进程表中的退出状态以及其它一些进程信息也是存储在内存中的,因此存在太多僵尸进程有时也会是一些问题。
你可以想象成这样:
“你是一家建筑公司的老板。你每天根据工人们的工作量来支付工资。有一个工人每天来到施工现场,就坐在那里,你不用付钱,他也不做任何工作。他只是每天都来然后呆坐在那,仅此而已!”
这个工人就是僵尸进程的一个活生生的例子。但是,如果你有很多僵尸工人,你的建设工地就会很拥堵从而让那些正常的工人难以工作。
找出僵尸进程
打开终端并输入下面命令:
\# ps aux | grep Z
会列出进程表中所有僵尸进程的详细内容。
杀掉僵尸进程
正常情况下我们可以用 SIGKILL
信号来杀死进程,但是僵尸进程已经死了,你不能杀死已经死掉的东西。因此你需要输入的命令应该是
\# kill -s SIGCHLD pid
将这里的 pid 替换成父进程的进程 id,这样父进程就会删除所有以及完成并死掉的子进程了。
你可以把它想象成:
“你在道路中间发现一具尸体,于是你联系了死者的家属,随后他们就会将尸体带离道路了。”
不过许多程序写的不是那么好,无法删掉这些子僵尸(否则你一开始也见不到这些僵尸了)。因此确保删除子僵尸的唯一方法就是杀掉它们的父进程。
via:
-
[Linux] killall 、kill 、pkill 命令详解 - 骑着蜗牛游世界 - 博客园 posted @ 2015-10-16 18:22
https://www.cnblogs.com/rsky/p/4886043.html -
centos下kill、killall、pkill命令区别_centos6 pkill-CSDN博客 Cape0915 于 2017-11-12 17:33:39 发布
https://blog.csdn.net/capecape/article/details/78513194 -
Mastering the “Kill” Command in Linux - Make Tech Easier
http://www.maketecheasier.com/kill-command-in-linux/译者:flsf 校对:wxy 由 LCTT 原创编译,Linux 中国. 荣誉推出
-
How to Find a Process ID and Kill it in Linux [CLI & GUI]
https://www.debugpoint.com/find-process-id-kill-linux/作者:Arindam 选题:lkxed 译者:yzuowei 校对:wxy 由 LCTT 原创编译,Linux 中国. 荣誉推出
-
What Are Zombie Processes And How To Find & Kill Zombie Processes?
http://www.linuxandubuntu.com/home/what-are-zombie-processes-and-how-to-find-kill-zombie-processes作者:linuxandubuntu 译者:lujun9972 校对:wxy 由 LCTT 原创编译,Linux 中国. 荣誉推出