知道如何使用ps,kill和killall命令终止进程并回收系统资源非常重要。
在Linux中,每个程序和守护程序都是一个“进程”。大多数进程代表一个正在运行的程序,一些进程可以引发其他进程,例如侦听某些事情发生并对其做出响应的进程。而且每个进程都需要一定的内存和处理能力。运行的进程越多,所需的内存和CPU就越多。在较旧的系统(例如,我使用了7年的笔记本电脑)或较小的计算机(例如,Raspberry Pi)上,如果留意后台运行的进程,则可以充分利用系统的性能。
可以使用ps命令获取正在运行的进程的列表。通常需要给ps一些参数,以便在其输出中显示更多信息。我喜欢使用-e参数查看系统上运行的每个进程,使用-f参数获取有关每个进程的完整详细信息。这里有些例子:
最后一个示例显示了最详细的信息。UID(用户ID)显示拥有该进程的用户。PID(进程ID)表示每个进程的数字ID,而PPID(父进程ID)表示生成该进程的进程的ID。在任何Unix系统中,进程从PID 1开始计数,这是内核启动后要运行的第一个进程。这里,systemd是第一个进程,它生成了kthreadd。而kthreadd创建了其他进程,包括rcu_gp,rcu_par_gp和许多其他进程。
使用kill命令进行进程管理
系统会自动处理大多数后台进程,因此无需担心它们。通常只需要运行应用程序,即可管理创建的任何进程。尽管许多应用程序一次运行一个进程(例如音乐播放器,终端仿真器或游戏),但其他应用程序可能会创建后台进程。当退出应用程序时,其中一些可能会继续运行,以便下次启动应用程序时它们可以快速恢复工作。
当我运行Chromium(Google Chrome浏览器的开源)时,进程管理是一个问题。Chromium使我的笔记本电脑非常努力地工作,并触发了许多额外的进程。
现在,我可以看到打开五个选项卡的Chromium进程:
我省略了几行,但是有20个Chromium进程和一个grep进程正在搜索字符串“ chromium”。
但是在我退出Chromium之后,这些进程仍然保持运行。如何关闭它们并回收这些进程占用的内存和CPU?
使用kill命令可以终止进程。在最简单的情况下,告诉kill要停止进程的PID。例如,要终止每个进程,需要对20个Chromium进程ID中的每一个执行kill命令。一种方法是使用命令行获取Chromium pid,然后针对该列表运行kill的命令行。
最后两行是关键。第一个命令行为Chromium浏览器生成一个进程ID列表。第二个命令行针对该进程ID列表运行kill命令。
介绍killall命令
一次停止所有进程的一种简单方法是使用killall命令。你可能会猜到该名称,killall会终止与该名称匹配的所有进程。这意味着我们可以使用此命令停止所有不正常的Chromium进程。这很简单:
$ killall /usr/lib64/chromium-browser/chromium-browser
但是要小心使用killall。该命令可以终止任何与提供的进程匹配的进程。这就是为什么我喜欢先使用ps-ef检查我正在运行的进程,然后针对要停止的进程使用绝对路径运行killall。
可以使用-i或–interactive选项让killall在停止每个进程之前提示。
killall还支持使用-o或–older-than参数来选择比特定时间更早的进程。例如,如果发现一组在无人值守的情况下运行了好几天的异常进程,这可能会很有帮助。或者,你可以选择比特定时间还早的进程,例如最近启动的失控进程,使用-y或–younger-than参数选择这些进程。
管理进程的其他方法:
进程管理是系统维护的重要组成部分。在我作为Unix和Linux系统管理员的早期职业生涯中,杀死进程的能力是保持系统正常运行的有用工具。在Linux桌面中,可能不需要杀死恶意进程,但是了解kill和killall可以在事情出错时帮助到你。
也可以寻找其他方式来管理进程。就我而言,退出浏览器后,我实际上并不需要使用kill或killall来停止Chromium后台进程。Chromium中有一个简单的设置可以控制:
不过,始终注意系统上正在运行哪些进程并知道如何在需要时进行管理始终是一个好主意。
扫码关注公众号,获取更多技术干货!