≡菜单

什么是Linux进程,线程,轻量级进程和进程状态

自诞生以来,Linux已经发展了很多。在服务器和关键任务工作中,它已成为使用最广泛的操作系统。尽管从整体上理解Linux并不容易,但是有一些方面是Linux的基础并且值得理解。

在本文中,我们将讨论Linux进程,线程和轻量级进程,并了解它们之间的区别。最后,我们还将讨论Linux进程的各种状态。

Linux进程

在最基本的形式中,Linux进程可以可视化为程序的运行实例。例如,只要在Linux机器上打开文本编辑器,文本编辑器进程就会诞生。

这是我在计算机上打开gedit的示例:

$ gedit &
[1] 5560

$ ps -aef | grep gedit
1000      5560  2684  9 17:34 pts/0    00:00:00 gedit

第一条命令(gedit&)一秒钟打开gedit窗口 ps命令 (ps -aef | grep gedit)检查是否存在关联的进程。在结果中,您可以看到存在与gedit相关的过程。

进程是Linux的基础,因为OS所做的每项工作都是根据进程来完成的。只要想一想,您就会发现这是一个过程。这是因为要完成的任何工作都需要系统资源(由内核提供),并且该过程被内核视为可以向其提供系统资源的实体。

进程具有优先级,具体取决于哪个内核上下文切换它们。如果可以执行优先级更高的进程,则可以抢占该进程。

例如,如果某个进程正在等待系统资源,例如保存在磁盘上的文本文件中的某些文本,则内核可以调度更高优先级的进程,并在数据可用时返回等待进程。这样可以使整个操作系统的运行状况保持平稳,并使用户感觉到任务正在并行运行。

进程可以使用进程间通信方法与其他进程通信,并可以使用共享内存之类的技术共享数据。

在Linux中,fork()用于创建新进程。这些新进程称为子进程,每个子进程最初共享所有段,例如文本,堆栈,堆等,直到子进程尝试对堆栈或堆进行任何更改。如有任何更改,将为子级准备单独的堆栈段和堆段副本,以使更改保持特定于子级。文本段是只读的,因此父级和子级都共享相同的文本段。 C前叉功能 文章详细介绍了fork()。

Linux线程与轻量级进程

Linux中的线程不过是流程执行的流程。包含多个执行流的进程称为多线程进程。

对于非多线程进程,只有执行流是主要的执行流,因此也称为单线程进程。对于Linux内核,没有线程的概念。内核将每个线程视为一个单独的进程,但是这些进程与其他常规进程有些不同。我将在以下各段中解释差异。

线程通常与轻量级进程或LWP混合使用。原因可以追溯到Linux仅在用户级别支持线程的时候。这意味着内核甚至将多线程应用程序视为单个进程。这给管理这些用户级线程的库提出了巨大的挑战,因为它必须处理这样的情况:如果有任何其他线程发出阻塞调用,则线程执行不会受到阻碍。

后来更改了实现,并将进程附加到每个线程,以便内核可以照顾它们。但是,如前所述,Linux内核并不将其视为线程,每个线程都被视为内核中的一个进程。这些过程称为轻量过程。

轻量级进程(LWP)与普通进程之间的主要区别在于,LWP共享相同的地址空间和其他资源,例如打开文件等。由于共享了某些资源,因此与其他普通进程相比,这些进程被认为是轻量级的因此,名称轻量级过程。

因此,实际上,我们可以说线程和轻量进程是相同的。它’仅线程是在用户级别使用的术语,而轻量级进程是在内核级别使用的术语。

从实现的角度来看,线程是使用Linux中符合POSIX的pthread库公开的功能创建的。在内部,clone()函数用于创建正常以及轻量化的过程。这意味着创建普通进程fork()时会使用适当的参数进一步调用clone(),而在创建线程或LWP时,pthread库中的函数会使用相关标志调用clone()。因此,主要区别是通过使用可以传递给clone()函数的不同标志生成的。

在各自的手册页上了解有关fork()和clone()的更多信息。

如何在Linux中创建线程 详细说明了线程。

Linux进程状态

普通Linux进程的生命周期看起来很像现实生活。流程诞生了,一段时间与父母共享资源,准备好进行更改时会获得自己的资源副本,根据其优先级经历各种状态,然后最终消亡。在本节中,将讨论Linux进程的各种状态:

  • 正在运行–此状态指定该进程正在执行中或正在等待执行。
  • 中断–此状态指定该进程正处于睡眠模式时正等待被中断,并正在等待可以唤醒该进程的某些操作。该动作可以是硬件中断,信号等。
  • 不可中断– It is just like the 中断state, the 上 ly difference being that a process in this state cannot be waken up 通过 delivering a signal.
  • 已停止–此状态指定该进程已停止。如果将诸如SIGSTOP,SIGTTIN等的信号传递到进程,则可能会发生这种情况。
  • 已追踪–此状态指定该进程正在调试。每当调试器停止该过程(以帮助用户调试代码)时,该过程就会进入此状态。
  • 松比–此状态指定进程已终止,但仍在内核进程表中徘徊,因为该进程的父级仍未获取此进程的终止状态。父级使用wait()系列函数来获取终止状态。
  • 死– This state specifies that the process is terminated and entry is removed from process table. This state is achieved when the parent successfully fetches the termination status as explained in 松比state.

如果您喜欢这篇文章,您可能还会喜欢..

  1. 50个Linux Sysadmin教程
  2. 50个最常用的Linux命令(包括示例)
  3. 排名前25位的最佳Linux性能监视和调试工具
  4. 妈妈,我找到了! – 15个实用的Linux Find命令示例
  5. Linux 101 Hacks第二版电子书 Linux 101黑客手册

Bash 101 Hacks书 Sed和Awk 101黑客手册 Nagios Core 3书 Vim 101黑客手册

{ 4 评论… 加一 }

  • 贾拉尔·哈吉霍拉玛利 2013年11月15日,晚上9:54

    你好

    谢谢你的简短文章

  • 昌丹 2013年11月16日,上午8:12

    很好的文章

  • 吉滕德拉 2013年12月2日,上午1:02

    好文章。

  • 艾丽尔·鲁伊斯(Ariel Ruiz) 2013年12月19日,下午12:47

    非常好理解的短文。

发表评论