了解如何使用 ps、kill 和 killall 命令来终止进程并回收系统资源 。
文章插图
文章插图
在 Linux 中 , 每个程序和守护程序daemon都是一个“进程process” 。大多数进程代表一个正在运行的程序 。而另外一些程序可以派生出其他进程,比如说它会侦听某些事件的发生 , 然后对其做出响应 。并且每个进程都需要一定的内存和处理能力 。你运行的进程越多,所需的内存和 CPU 使用周期就越多 。在老式电脑(例如我使用了 7 年的笔记本电脑)或轻量级计算机(例如树莓派)上,如果你关注过后台运行的进程 , 就能充分利用你的系统 。
你可以使用
ps
命令来查看正在运行的进程 。你通常会使用ps
命令的参数来显示出更多的输出信息 。我喜欢使用-e
参数来查看每个正在运行的进程,以及-f
参数来获得每个进程的全部细节 。以下是一些例子:$ psPID TTYTIME CMD88000 pts/000:00:00 bash88052 pts/000:00:00 ps88053 pts/000:00:00 head
$ ps -e | headPID TTYTIME CMD1 ?00:00:50 systemd2 ?00:00:00 kthreadd3 ?00:00:00 rcu_gp4 ?00:00:00 rcu_par_gp6 ?00:00:02 kworker/0:0H-events_highpri9 ?00:00:00 mm_percpu_wq10 ?00:00:01 ksoftirqd/011 ?00:00:12 rcu_sched12 ?00:00:00 migration/0
$ ps -ef | headUIDPIDPPIDC STIME TTYTIME CMDroot100 13:51 ?00:00:50 /usr/lib/systemd/systemd --switched-root --system --deserialize 36root200 13:51 ?00:00:00 [kthreadd]root320 13:51 ?00:00:00 [rcu_gp]root420 13:51 ?00:00:00 [rcu_par_gp]root620 13:51 ?00:00:02 [kworker/0:0H-kblockd]root920 13:51 ?00:00:00 [mm_percpu_wq]root1020 13:51 ?00:00:01 [ksoftirqd/0]root1120 13:51 ?00:00:12 [rcu_sched]root1220 13:51 ?00:00:00 [migration/0]
最后的例子显示最多的细节 。在每一行,UID
(用户 ID)显示了该进程的所有者 。PID
(进程 ID)代表每个进程的数字 ID , 而PPID
(父进程 ID)表示其父进程的数字 ID 。在任何 Unix 系统中,进程是从 1 开始编号 , 是内核启动后运行的第一个进程 。在这里 , systemd
是第一个进程 , 它催生了kthreadd
,而kthreadd
还创建了其他进程 , 包括rcu_gp
、rcu_par_gp
等一系列进程 。使用 kill 命令来管理进程系统会处理大多数后台进程 , 所以你不需要操心这些进程 。你只需要关注那些你所运行的应用创建的进程 。虽然许多应用一次只运行一个进程(如音乐播放器、终端模拟器或游戏等),但其他应用则可能创建后台进程 。其中一些应用可能当你退出后还在后台运行,以便下次你使用的时候能快速启动 。当我运行 Chromium(作为谷歌 Chrome 浏览器所基于的开源项目)时,进程管理便成了问题 。Chromium 在我的笔记本电脑上运行非常吃力,并产生了许多额外的进程 。现在我仅打开五个选项卡,就能看到这些 Chromium 进程:
$ ps -ef | fgrep chromiumjhall66221[...]/usr/lib64/chromium-browser/chromium-browser [...]jhall66230[...]/usr/lib64/chromium-browser/chromium-browser [...][...]jhall66861[...]/usr/lib64/chromium-browser/chromium-browser [...]jhall67329651320 15:45 pts/000:00:00 grep -F chromium
我已经省略一些行 , 其中有 20 个 Chromium 进程和一个正在搜索 “chromium” 字符的 grep
进程 。$ ps -ef | fgrep chromium | wc -l21
但是在我退出 Chromium 之后 , 这些进程仍旧运行 。如何关闭它们并回收这些进程占用的内存和 CPU 呢?kill
命令能让你终止一个进程 。在最简单的情况下 , 你告诉kill
命令终止你想终止的进程的 PID 。例如 , 要终止这些进程,我需要对 20 个 Chromium 进程 ID 都执行kill
命令 。一种方法是使用命令行获取 Chromium 的 PID , 而另一种方法针对该列表运行kill
:$ ps -ef | fgrep /usr/lib64/chromium-browser/chromium-browser | awk '{print $2}'662216623066239662576626266283662846628566324663376636066370663866640266503665396659566734668486686169702$ ps -ef | fgrep /usr/lib64/chromium-browser/chromium-browser | awk '{print $2}' > /tmp/pids$ kill $(cat /tmp/pids)
最后两行是关键 。第一个命令行为 Chromium 浏览器生成一个进程 ID 列表 。第二个命令行针对该进程 ID 列表运行 kill
命令 。介绍 killall 命令一次终止多个进程有个更简单方法 , 使用
killall
命令 。你或许可以根据名称猜测出,killall
会终止所有与该名字匹配的进程 。这意味着我们可以使用此命令来停止所有流氓 Chromium 进程 。这很简单:$ killall /usr/lib64/chromium-browser/chromium-browser
但是要小心使用 killall
。该命令能够终止与你所给出名称相匹配的所有进程 。这就是为什么我喜欢先使用ps -ef
命令来检查我正在运行的进程,然后针对要停止的命令的准确路径运行killall
。你也可以使用 -i
或--interactive
参数,来让killkill
在停止每个进程之前提示你 。killall
还支持使用-o
或--older-than
参数来查找比特定时间更早的进程 。例如,如果你发现了一组已经运行了好几天的恶意进程,这将会很有帮助 。又或是,你可以查找比特定时间更晚的进程,例如你最近启动的失控进程 。使用-y
或--young-than
参数来查找这些进程 。其他管理进程的方式进程管理是系统维护重要的一部分 。在我作为 Unix 和 Linux 系统管理员的早期职业生涯中,杀死非法作业的能力是保持系统正常运行的关键 。在如今,你可能不需要亲手在 Linux 上的终止流氓进程,但是知道
kill
和killall
能够在最终出现问题时为你提供帮助 。你也能寻找其他方式来管理进程 。在我这个案例中 , 我并不需要在我退出浏览器后,使用
kill
或killall
来终止后台 Chromium 进程 。在 Chromium 中有个简单设置就可以进行控制:文章插图
文章插图
【分享linuxkill命令详解 kill指令怎么用】不过,始终关注系统上正在运行哪些进程,并且在需要的时候进行干预是一个明智之举 。
- 分享30岁以后,职场之路如何走?
- 分享速度最快的兔子御魂 山兔御魂搭配
- 分享迷你世界做摩托车教程 迷你世界摩托车怎么造出来
- 分享英雄无敌3骨灰级技巧 英雄无敌3最完美技能搭配攻略
- 分享vmware基本命令 vmware使用教程
- 做了四年营销工作,我有7个建议想分享给大家
- 4个软文标题写作技巧分享 软文标题怎么写
- 金点子创业思路分享 金点子生意有哪些
- 教你查别人ip地址精确位置 查询电脑ip地址命令是什么
- 关于cad计算面积的方法 cad面域快捷键命令