什么是Linux进程?(如何管理Linux进程)

我们都遵循某些流程来实现我们的目标,类似的是,每个系统都有自己的进程来完成任务

在 Linux 系统中执行的每个程序或命令都被称为一个进程。

在本教程中,让我们来探讨进程以及我们如何在 Linux 中管理它们。

什么是Linu进程

理论上,一个进程被称为一个正在执行的程序,就是一个系统目前正在进行的任务。

你在系统上的每一个动作都会导致一个新的进程。例如,打开一个浏览器就会启动一个进程。

简单地说,一个进程是一个程序的实例。用户的操作被转化为一个命令,在执行该命令时将会创建一个新的进程。

进程按照父-子层次结构工作。正如层次结构的名称所表示的那样,由命令/程序启动的进程被称为父进程,父进程产生的进程被称为子进程。

Linux进程的类型

在 Linux 发行版中,进程被分为两种类型:

  • 前台进程
  • 后台进程

前台进程

一个需要用户使用终端命令或程序来启动的进程被称为前台进程。这意味着前台进程需要一个来自用户的输入触发。所以每个前台进程都是手动触发的。

每当一个进程在前台运行时,其他进程应该等待,直到当前进程完成。

证明这一点的最好例子是通过 sleep 命令。sleep 命令不允许用户与终端互动,直到达到给定的时间。

sleep 10

终端命令在前台延迟 10 秒

什么是Linux进程?(如何管理Linux进程),任务,每个,系统,Linux教程,第1张

sleep 终端命令在前台运行并暂停用户输入

我们应该等待 10 秒钟,以访问终端运行另一个命令。

后台进程

一个独立于用户输入运行的进程被称为后台进程。与前台进程不同,我们可以在一个后台进程中同时运行多个进程。

要在后台运行一个进程,在你用来启动该进程的命令的结尾处放一个安培号(&)。

这里有一个例子:

让我们在一个后台进程中执行 sleep 命令。它将在后台运行,并将终端还给我们以运行其他命令。

什么是Linux进程?(如何管理Linux进程),任务,每个,系统,Linux教程,第2张

后台进程的终端命令示例

sleep 10 &

终端命令在后台延迟 10 秒

现在我们可以看到,上述命令在后台运行。它创建了一个 PID 19003 的进程。所以我们可以同时运行另一条命令(pwd 命令)。

如何将一个前台进程改为后台进程

如果我们在前台启动一个进程并想把它放到后台,我们可以用 bg 命令来实现。让我们看看如何将前台进程改为后台。

如果一个进程正在运行,按 CTRL+Z 键。这个命令将暂停当前进程。

什么是Linux进程?(如何管理Linux进程),任务,每个,系统,Linux教程,第3张
前台进程输出

然后运行 bg 命令。它接受一个进程 ID 作为参数,并将该进程放入后台。如果参数为空,它将把当前暂停的进程放入后台。

bg <process_id>

将进程移至后台的命令

bg

将上一个进程移到后台的命令

什么是Linux进程?(如何管理Linux进程),任务,每个,系统,Linux教程,第4张
前台进程向后台进程输出

我们可以看到暂停的命令(sudo apt update)在后台恢复了。

如何列出Linux进程

在我们介绍如何做到这一点之前,你应该知道为什么你可能需要知道一个进程的列表。这里有几个原因:

  • 要知道哪个进程消耗的时间更多
  • 要知道哪个进程占用更多的内存和 CPU
  • 要知道一个正在运行的进程所触发的命令

要查看当前正在运行的进程,我们可以使用 ps(Process Status 进程状态)命令:

ps

列出正在运行的进程的终端命令

什么是Linux进程?(如何管理Linux进程),任务,每个,系统,Linux教程,第5张
ps 命令展示正在运行的进程的列表

要列出每个登录用户的所有进程的摘要,我们可以使用 w 命令。这个命令是 Linux 中 whouptime 和 ps -a 命令的结合。

w

列出所有登录用户的进程的终端命令

什么是Linux进程?(如何管理Linux进程),任务,每个,系统,Linux教程,第6张
w 命令显示所有用户的进程列表

如何以树状视图列出进程

当一个程序/命令运行时,它启动了一个被称为“父进程”的主进程。父进程可能依赖于其他一些命令/程序,这将创建一个子进程。

下面的截图是一个例子。

什么是Linux进程?(如何管理Linux进程),任务,每个,系统,Linux教程,第7张
父进程(firefox)的子进程

在上面的截图中,Firefox 是父进程,其他进程是其子进程。

让我们来探讨一下如何以树状结构列出进程。

pstree 是一个 Linux 命令,用于以树状结构列出所有用户的当前运行进程。它被用作 ps 命令的一个更直观的替代。

pstree

将进程以树状结构列出的终端命令

什么是Linux进程?(如何管理Linux进程),任务,每个,系统,Linux教程,第8张
pstree 命令以树状结构列出所有进程

我们可以看到,正在运行的进程是以树状形式显示的。这对于可视化进程是很有用的。

在命令中添加 -p 标志将显示每个分支和其进程 ID。

pstree -p

以树状结构显示一个父进程的子进程的终端命令

什么是Linux进程?(如何管理Linux进程),任务,每个,系统,Linux教程,第9张
终端命令以树状视图显示带有 PID 的进程列表

要列出一个特定进程的子进程,请将进程 ID 作为参数传给 pstree 命令。

pstree 3149

列出进程 id 3149 的进程的终端命令

什么是Linux进程?(如何管理Linux进程),任务,每个,系统,Linux教程,第10张
将某一进程罗列为树状视图

在上文中,我提到 pstree 命令列出了所有用户的进程。在 pstree 命令中传递用户名,只列出该用户运行的进程。

pstree root
什么是Linux进程?(如何管理Linux进程),任务,每个,系统,Linux教程,第11张
以树状视图列出特定用户的进程

上面的截图显示了由 root 用户运行的进程。

如何查看某个程序的进程

很多开发者可能都遇到过以下情况:

在进行 web 开发项目时,我们使用 Chrome、Firefox 等不同的浏览器来验证输出。

有些开发者会不断地打开标签,而从不关闭已打开的标签。由于负载过重(如果打开了 150 多个标签),浏览器有时会没有反应?导致系统挂起。最糟糕的是,我们将无法关闭浏览器?。

与 Windows 不同,我们在 Linux 中没有任务管理器来杀死浏览器。

这个问题在 Linux 中也可以轻松解决。让我们看看一个 Linux 专家是如何处理这种情况的。

我们知道,每个程序(包括浏览器)都是作为一个进程运行的。所以,你只需要找到进程的 ID,然后关掉它。

让我们看看如何找到你需要的一个命令/程序的进程 ID。

在我的系统中,Chrome 正在运行,现在我们可以通过运行以下命令得到 Chrome 的 PID:

sleep 10 &0

查找进程 ID 的终端命令

什么是Linux进程?(如何管理Linux进程),任务,每个,系统,Linux教程,第12张
查找 Chrome 进程 ID 的终端命令

如何杀死一个进程

在 Linux 中,有一个叫作 kill 的命令,通过传递 PID(进程 ID)或进程名称来杀死任何进程。

下面是 kill 命令的语法:

sleep 10 &1

kill 命令的语法

让我们存储 Chrome 的 PID,并使用 kill 命令杀死它:

sleep 10 &2

杀死一个进程的命令

什么是Linux进程?(如何管理Linux进程),任务,每个,系统,Linux教程,第13张
杀死一个进程的终端命令

上述命令将杀死 Chrome web 浏览器。

如何列出所有进程

我们可以使用 top 命令查看所有的 Linux 进程。它为所有用户显示每个进程的实时更新。

sleep 10 &3

实时列出所有进程的命令

什么是Linux进程?(如何管理Linux进程),任务,每个,系统,Linux教程,第14张
实时显示所有进程的终端命令

让我们了解一下标题,以理解下方的数据。

  • PID 代表一个唯一的进程 ID
  • USER 代表任务所有者的用户名
  • PR 代表该进程的优先级,数字越小,优先级越高
  • NI 代表任务的优先级,一个负的 Nice 值意味着更高的优先级,一个正的 Nice 值意味着更低的优先级
  • VIRT 代表任务使用的总虚拟内存
  • RES 代表一个进程的 RAM 使用量,以千字节为单位
  • SHR 代表一个进程使用的共享内存大小(Kb)
  • S 代表进程的状态:
    – *D*不间断的睡眠
    – *R*运行
    – *S*睡眠
    – *T*追踪(已停止)
    – *Z*僵尸
  • CPU 代表 CPU 使用率
  • MEM 代表任务的内存使用量
  • TIME 代表 CPU 时间
  • COMMAND 代表用于启动进程的命令

要显示特定的用户进程,我们应该使用标志 -u

sleep 10 &4

列出特定用户进程的终端命令语法

要查看由用户 gogosoon 运行的进程,请运行以下命令:

sleep 10 &5

列出由用户 gogosoon 启动的进程的终端命令

什么是Linux进程?(如何管理Linux进程),任务,每个,系统,Linux教程,第15张
由用户 gogosoon 启动的所有进程的终端输出

你可能对命令行的输出感到困惑 ?。这对实时调试进程来说有点困难。

这里有一个方便的 GUI 工具来处理 Linux 中的进程。但我们必须手动安装这个工具。这将更像 Windows 中的任务管理器。

sleep 10 &6

安装系统监控应用程序的终端命令

安装后,只需在终端输入软件的名称:

sleep 10 &7

在 GUI 中打开进程列表的命令

这将在一个新的窗口中打开所有的进程,并有一个不错的 GUI:

什么是Linux进程?(如何管理Linux进程),任务,每个,系统,Linux教程,第16张

当我们右键点击任何进程时,它将显示诸如杀死、停止、结束等操作。

资源选项卡显示以下工具:

  • CPU 历史
  • 内存和交换历史
  • 网络历史
什么是Linux进程?(如何管理Linux进程),任务,每个,系统,Linux教程,第17张
CPU 历史记录
什么是Linux进程?(如何管理Linux进程),任务,每个,系统,Linux教程,第18张
内存和交换历史记录
什么是Linux进程?(如何管理Linux进程),任务,每个,系统,Linux教程,第19张
网络历史记录

这些图表对确定你的系统中的负载很有用。

总结

在这篇文章中,你已经了解了 Linux 中进程的基本知识。我希望你现在能更好地理解它们是如何工作的。我建议你在你的系统中尝试这些命令。

发表评论 取消回复

很抱歉,您暂时无法发布评论。需要 登录 后才能发布。

返回评论 返回顶部