Linux进程状态


摘要

本文我们将学习Linux进程状态。我们将研究Linux进程在其生命周期不同阶段可能处于的五个状态中的每一个。

  • 运行中 & 可运行

  • 已停止

  • 不可中断睡眠

  • 僵死

  • 可中断睡眠

上面提到的每个进程状态都有其明确的原因。彻底了解这些状态对于调试资源耗尽或失控进程生成等问题非常有帮助。如果需要了解如何终止或杀死进程,这种理解就更为重要,因为根据进程的状态可能需要不同的技术。

运行中 & 可运行

启动新进程时,它会进入运行或可运行状态。运行时,进程使用CPU核心执行其逻辑和代码。然而,线程调度方法可以强制运行中的进程放弃其执行权。这将确保每个进程都能平等地访问CPU资源。由于进程现在处于可运行状态并等待执行,因此在这种情况下,它会提前被添加到运行队列中。

运行中的进程已准备好执行,而可运行的进程已排队,但由于某种原因,CPU尚未准备好调度它们。因此,它被安排执行。由于虚拟机环境中的实际CPU是超配的,因此虚拟CPU可能会有稍微更多的延迟或CPU就绪性。

可中断睡眠

运行中的进程会在某个时刻到达等待数据的阶段。这可以通过一种方式来实现,例如请求用户的输入,例如终端的输入。其他时候,该进程可以是一个空闲等待请求的Web服务器。

编写良好的程序在等待此数据时会进入可中断睡眠状态。此状态使终止进程变得简单且无故障。在等待输入时,进程可能会进入此状态以退居二线并让其他进程使用CPU。不必要地循环使用CPU时间会浪费资源。可以通过在前面加上点(.)来创建新的目录或文件,并将其隐藏在文件的正常列表中。

不可中断睡眠

与可中断睡眠一样,进程处于不可中断睡眠状态时处于等待状态。在这种情况下,中断通常会非常成问题。虽然不常见,但当发现进程处于此状态时,通常是系统调用(通常称为syscall)造成的。Mkdir就是一个很好的例子。在它对内核进行系统调用时会进入此状态。对于本地磁盘,这种情况通常会立即发生,除非在极端条件下。如果存在正确的条件,则在像NFS这样的网络文件系统中,它可能会在此状态下无限期地停滞。

不可中断睡眠状态对任何信号均无响应;它只是等待资源可用,然后才能转换为可运行状态。另一方面,可中断睡眠状态将响应信号和资源的可用性。

已停止

您可以将已停止的进程更多地视为已暂停的进程。在许多控制台工具和应用程序中,您可以使用Control + Z来挂起进程。在这种情况下,进程已暂停且无响应。当前景程序请求用户输入但您尚未准备好提供时,这说明了进程可能处于此状态的情况。您可以使用Control+Z将其挂起,然后继续执行其他操作。当您准备好继续处理它时,可以使用“fg”命令将其调回。

僵死

处于僵死状态的进程似乎处于异常状态。简单来说,这是进程终止后但在其父进程将其从进程表中移除之前的状态。进程结束后,父进程有责任“回收”子进程并清理进程表。

在大多数情况下,僵死进程只在父进程未完成此清理并且仍有运行中的进程时才会出现。“僵死”这个词大概是类比,因为僵死是死而复生,因此无法杀死。考虑一下在这种情况下可能有效的方法。它已经结束,但尚未真正消失。

结论

在本教程中,我们学习了一些在Linux中跳过隐藏文件和目录的递归复制示例。我们在本文中讨论了如何在复制目录时递归地省略隐藏文件和目录。

复制所有内容然后删除隐藏项的方法很简单。这可能会导致安全漏洞和性能问题。任何Linux用户都可以快速修复此问题。随意尝试Linux提供的任何方法来解决此问题,以消除此错误。上述步骤适用于各种Linux发行版。所有操作系统都必须将文件描述符作为基本元素。

更新于:2023年8月1日

2K+ 浏览量

开启你的职业生涯

通过完成课程获得认证

开始学习
广告