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

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

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

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

什么是Linu进程

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

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

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

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

Linux进程的类型

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

  • 前台进程
  • 后台进程

前台进程

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

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

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

sleep 10

终端命令在前台延迟 10 秒

图片[1]-什么是Linux进程?(如何管理Linux进程)-不念博客

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

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

后台进程

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

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

这里有一个例子:

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

图片[2]-什么是Linux进程?(如何管理Linux进程)-不念博客

后台进程的终端命令示例

sleep 10 &

终端命令在后台延迟 10 秒

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

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

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

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

图片[3]-什么是Linux进程?(如何管理Linux进程)-不念博客
前台进程输出

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

bg <process_id>

将进程移至后台的命令

bg

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

图片[4]-什么是Linux进程?(如何管理Linux进程)-不念博客
前台进程向后台进程输出

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

如何列出Linux进程

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

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

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

ps

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

图片[5]-什么是Linux进程?(如何管理Linux进程)-不念博客
ps 命令展示正在运行的进程的列表

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

w

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

图片[6]-什么是Linux进程?(如何管理Linux进程)-不念博客
w 命令显示所有用户的进程列表

如何以树状视图列出进程

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

下面的截图是一个例子。

图片[7]-什么是Linux进程?(如何管理Linux进程)-不念博客
父进程(firefox)的子进程

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

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

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

pstree

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

图片[8]-什么是Linux进程?(如何管理Linux进程)-不念博客
pstree 命令以树状结构列出所有进程

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

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

pstree -p

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

图片[9]-什么是Linux进程?(如何管理Linux进程)-不念博客
终端命令以树状视图显示带有 PID 的进程列表

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

pstree 3149

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

图片[10]-什么是Linux进程?(如何管理Linux进程)-不念博客
将某一进程罗列为树状视图

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

pstree root
图片[11]-什么是Linux进程?(如何管理Linux进程)-不念博客
以树状视图列出特定用户的进程

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

如何查看某个程序的进程

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

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

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

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

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

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

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

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

pidof chrome

查找进程 ID 的终端命令

图片[12]-什么是Linux进程?(如何管理Linux进程)-不念博客
查找 Chrome 进程 ID 的终端命令

如何杀死一个进程

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

下面是 kill 命令的语法:

kill <pid/processname>

kill 命令的语法

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

a=$(pidof chrome)kill $a

杀死一个进程的命令

图片[13]-什么是Linux进程?(如何管理Linux进程)-不念博客
杀死一个进程的终端命令

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

如何列出所有进程

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

top

实时列出所有进程的命令

图片[14]-什么是Linux进程?(如何管理Linux进程)-不念博客
实时显示所有进程的终端命令

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

  • 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

top -u <username>

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

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

top -u gogosoon

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

图片[15]-什么是Linux进程?(如何管理Linux进程)-不念博客
由用户 gogosoon 启动的所有进程的终端输出

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

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

sudo apt install gnome-system-monitor

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

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

gnome-system-monitor

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

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

图片[16]-什么是Linux进程?(如何管理Linux进程)-不念博客

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

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

  • CPU 历史
  • 内存和交换历史
  • 网络历史
图片[17]-什么是Linux进程?(如何管理Linux进程)-不念博客
CPU 历史记录
图片[18]-什么是Linux进程?(如何管理Linux进程)-不念博客
内存和交换历史记录
图片[19]-什么是Linux进程?(如何管理Linux进程)-不念博客
网络历史记录

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

总结

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

© 版权声明
THE END