网站搜索

关于 Linux 进程你需要了解的一切 [综合指南]


在本文中,我们将逐步了解对进程的基本了解,并简要介绍如何使用某些命令在 Linux 中管理进程。

进程指的是正在执行的程序;它是一个程序的运行实例。它由程序指令、从文件读取的数据、其他程序或系统用户的输入组成。

流程类型

Linux 中基本上有两种类型的进程:

  • 前台进程(也称为交互式进程)——这些进程通过终端会话进行初始化和控制。换句话说,必须有一个用户连接到系统才能启动此类进程;它们没有作为系统功能/服务的一部分自动启动。
  • 后台进程(也称为非交互式/自动进程)——是未连接到终端的进程;他们不期望任何用户输入。

什么是守护进程

这些是特殊类型的后台进程,它们在系统启动时启动并作为服务永远运行;他们不会死。它们作为系统任务(作为服务运行)自发启动。然而,它们可以由用户通过 init 进程来控制。

在Linux中创建进程

当现有进程在内存中精确复制自身时,通常会创建新进程。子进程将与其父进程具有相同的环境,只是进程 ID 号不同。

在 Linux 中创建新进程有两种传统方法:

  • 使用System()函数——这种方法相对简单,但是效率低下,并且存在一定的安全风险。
  • 使用 fork() 和 exec() 函数 – 这种技术有点先进,但提供了更大的灵活性、速度和安全性。

Linux如何识别进程?

由于Linux是一个多用户系统,这意味着不同的用户可以在系统上运行各种程序,因此程序的每个运行实例必须由内核唯一标识。

程序由其进程 ID (PID) 及其父进程 ID (PPID) 来标识,因此进程可以进一步分类为:

  • 父进程 – 这些进程在运行时创建其他进程。
  • 子进程 – 这些进程是在运行时由其他进程创建的。

初始化进程

Init进程是系统上所有进程的母(parent)进程,它是Linux系统启动时执行的第一个程序;它管理系统上的所有其他进程。它是由内核本身启动的,所以原则上它没有父进程。

init 进程的进程 ID 始终为 1。它充当所有孤立进程的养父进程。

您可以使用pidof命令来查找进程的ID:

pidof systemd
pidof top
pidof httpd

要查找当前 shell 的进程 ID 和父进程 ID,请运行:

echo $$
echo $PPID

在 Linux 中启动进程

一旦您运行命令或程序(例如cloudcmd – CloudCommander),它将在系统中启动一个进程。您可以按如下方式启动前台(交互式)进程,它将连接到终端并且用户可以向其发送输入:

cloudcmd

Linux 后台作业

要在后台(非交互式)启动进程,请使用 & 符号,在这里,进程在移动到前台之前不会读取用户的输入。

cloudcmd &
jobs

您还可以使用[Ctrl + Z]将进程发送到后台,这将向进程发送SIGSTOP信号,从而停止其操作;它变得空闲:

tar -cf backup.tar /backups/*  #press Ctrl+Z
jobs

要在后台继续运行上述暂停的命令,请使用 bg 命令:

bg

要将后台进程发送到前台,请使用 fg 命令和作业 ID,如下所示:

jobs
fg %1

您可能还喜欢:如何在后台启动 Linux 命令并在终端中分离进程

Linux 中进程的状态

在执行期间,进程根据其环境/情况从一种状态更改为另一种状态。在Linux中,进程有以下可能的状态:

  • 正在运行 – 这里它要么正在运行(它是系统中的当前进程),要么准备运行(它正在等待分配给其中一个 CPU)。
  • 等待 – 在此状态下,进程正在等待事件发生或等待系统资源。此外,内核还区分两种类型的等待进程:可中断等待进程 - 可以被信号中断,不可中断等待进程 - 直接在硬件条件下等待,不能被任何事件/信号中断。
  • 已停止 – 在这种状态下,进程已停止,通常是通过接收信号来停止。例如,正在调试的进程。
  • 僵尸 – 这里,一个进程已经死亡,它已被停止,但它在进程表中仍然有一个条目。

如何在 Linux 中查看活动进程

有几种 Linux 工具可用于查看/列出系统上正在运行的进程,其中两个传统且众所周知的命令是 ps 和 top 命令:

1.ps命令

它显示有关系统上选定的活动进程的信息,如下所示:

ps 
ps -e | head 

2. top – 系统监控工具

top 是一个功能强大的工具,可以为您提供正在运行的系统的动态实时视图,如下面的屏幕截图所示:

top 

阅读此内容以获取更多顶级用法示例:Linux 中的 12 个 TOP 命令示例

3. 一览——系统监控工具

glances 是一个相对较新的系统监控工具,具有高级功能:

glances

如需全面的使用指南,请阅读:Glances – 适用于 Linux 的高级实时系统监控工具

还有其他几个有用的 Linux 系统监控工具可以用来列出活动进程,请打开下面的链接以了解有关它们的更多信息:

  1. 20 个监控 Linux 性能的命令行工具
  2. 13 个更有用的 Linux 监控工具

如何控制 Linux 中的进程

Linux还有一些用于控制进程的命令,例如kill、pkill、pgrep和killall,下面是如何使用它们的一些基本示例:

pgrep -u tecmint top
kill 2308
pgrep -u tecmint top
pgrep -u tecmint glances
pkill glances
pgrep -u tecmint glances

要了解如何深入使用这些命令来终止/终止 Linux 中的活动进程,请打开以下链接:

  1. 用于终止 Linux 进程的 Kill、Pkill 和 Killall 命令指南
  2. 如何在 Linux 中查找并终止正在运行的进程

请注意,当系统死机时,您可以使用它们来终止 Linux 中无响应的应用程序。

向进程发送信号

Linux 中控制进程的基本方法是向它们发送信号。您可以向进程发送多个信号,以查看所有运行的信号:

kill -l

要向进程发送信号,请使用我们前面提到的kill、pkill 或pgrep 命令。但程序只有被编程为能够识别这些信号,才能响应这些信号。

而且大多数信号都是供系统内部使用,或者供程序员编写代码时使用。以下是对系统用户有用的信号:

  • SIGHUP 1 – 当控制终端关闭时发送到进程。
  • SIGINT 2 – 当用户通过按 [Ctrl+C] 中断进程时,由其控制终端发送到进程。
  • SIGQUIT 3 – 如果用户发送退出信号[Ctrl+D],则发送到进程。
  • SIGKILL 9 – 该信号立即终止(杀死)进程,并且该进程不会执行任何清理操作。
  • SIGTERM 15 – 这是一个程序终止信号(默认情况下,kill 将发送此信号)。
  • SIGTSTP 20 – 由进程的控制终端发送到进程,请求其停止(终端停止);由用户按[Ctrl+Z]启动。

以下是在 Firefox 应用程序冻结后使用其 PID 来终止 Firefox 应用程序的终止命令示例:

pidof firefox
kill 9 2687
OR
kill -KILL 2687
OR
kill -SIGKILL 2687  

要使用应用程序名称终止应用程序,请使用 pkill 或 Killall,如下所示:

pkill firefox
killall firefox 

更改 Linux 进程优先级

在Linux系统上,所有活动进程都有优先级和一定的nice值。具有较高优先级的进程通常会比较低优先级的进程获得更多的 CPU 时间。

但是,具有 root 权限的系统用户可以使用 nicerenice 命令影响这一点。

从top命令的输出中,NI显示了进程的nice值:

top  

使用nice命令为进程设置nice值。请记住,普通用户可以为他们拥有的进程赋予从 0 到 20 的良好值。
只有 root 用户可以使用负的 Nice 值。

renice进程的优先级,请使用renice命令,如下所示:

renice +8  2687
renice +8  2103

查看我们的一些关于如何管理和控制 Linux 进程的有用文章。

  1. Linux 进程管理:启动、关闭以及其间的一切
  2. 在批处理模式下使用“top”查找按内存使用情况排名前 15 的进程
  3. 根据 Linux 中内存和 CPU 使用率最高的情况查找运行最多的进程
  4. 如何在 Linux 中使用 PID 号查找进程名称

目前为止就这样了!您有任何问题或其他想法,请通过下面的反馈表与我们分享。