了解如何使用ps、kill和killall命令终止进程并回收系统资源。在Linux中,每个程序和守护进程都是一个“进程”。大多数进程代表一个正在运行的程序。还有一些其他程序可以产生其他进程,例如,它会监听某些事件的发生,然后响应它们。并且每个进程都需要一定的内存和处理能力。运行的进程越多,所需的内存和CPU周期就越多。在旧电脑(比如我用了7年的笔记本电脑)或轻型电脑(比如RaspberryPi)上,如果你注意后台运行的进程,就可以充分利用你的系统。您可以使用ps命令查看正在运行的进程。您通常使用ps命令参数来显示更多输出信息。我喜欢使用-e参数来查看每个正在运行的进程,并使用-f参数来获取每个进程的完整详细信息。下面是一些例子:$psPIDTTYTIMECMD88000pts/000:00:00bash88052pts/000:00:00ps88053pts/000:00:00head$ps-e|headPIDTTYTIMECMD1?00:00:50系统2?00:00:00kthreadd3?00:00:00rcu_gp4?00:00:00rcu_par_gp6?00:00:02kworker/0:0H-events_highpri9?00:00:00mm_percpu_wq10?00:00:01ksoftirqd/011?00:00:12rcu_sched12?00:00:00迁移/0$ps-ef|headUIDPIDPPIDCSTIMETTYTIMECMDroot10013:51?00:00:50/usr/lib/systemd/systemd--switched-root--system--deserialize36root20013:51?00:00:00[kthreadd]root32013:51?00:00:00[rcu_gp]root42013:51?00:00:00[rcu_par_gp]root62013:51?00:00:02[kworker/0:0H-kblockd]根92013:51?00:00:00[mm_percpu_wq]root102013:51?00:00:01[ksoftirqd/0]root112013:51?00:00:12[rcu_sched]root122013:51?00:00:00[migration/0]最后一个例子显示了最详细的信息在每一行中,UID(用户ID)显示了进程的所有者。PID(ProcessID)表示每个进程的数字ID,而PPID(ParentProcessID)表示其父进程的数字ID。在任何Unix系统中,进程都是从1开始编号的,是内核启动后第一个运行的进程。这里systemd是第一个进程,它衍生出kthreadd,kthreadd还创建了其他进程,包括rcu_gp、rcu_par_gp等一系列进程。使用kill命令管理进程系统会处理大部分后台进程,因此您无需担心它们。您只需要关注您正在运行的应用程序创建的那些进程。虽然许多应用程序一次只运行一个进程(例如音乐播放器、终端仿真器或游戏),但其他应用程序可能会创建后台进程。其中一些应用程序在您退出后可能仍在后台运行,因此您下次使用它们时它们可以快速启动。当我运行Chromium(Google的Chrome浏览器所基于的开源项目)时,进程管理成为一个问题。Chromium在我的笔记本电脑上苦苦挣扎,并产生了许多额外的进程。现在我可以看到这些Chromium进程只打开了五个选项卡:$ps-ef|fgrepchromiumjhall66221[...]/usr/lib64/chromium-browser/chromium-browser[...]jhall66230[...]/usr/lib64/chromium-browser/chromium-browser[...][…]jhall66861[...]/usr/lib64/chromium-browser/chromium-browser[...]jhall6732965132015:45pts/000:00:00grep-Fchromium我省略了一些行其中有20个Chromium进程和一个正在搜索“chromium”字符的grep进程。$ps-ef|fgrep铬|wc-l21但在我退出Chromium后,进程仍在运行。您如何关闭它们并回收这些进程使用的内存和CPU?kill命令允许您终止进程。在最简单的情况下,您告诉kill命令终止您要终止的进程的PID。例如,要终止这些进程,我需要对所有20个Chromium进程ID执行kill命令。一种方法是使用命令行获取Chromium的PID,而另一种方法是对列表运行kill:$ps-ef|fgrep/usr/lib64/铬浏览器/铬浏览器|66370663866640266503665396659566734668486686169702$ps-ef|fgrep/usr/lib64/铬浏览器/铬浏览器|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中有一个简单的设置可以控制它:Chromium后台进程设置但是,明智的做法是密切关注系统上正在运行的进程并在需要时进行干预。
