Linux进程的概念说明

来源:
导读 大家好,我是本期栏目编辑小友,现在为大家讲解Linux进程的概念说明问题。 进程是Linux操作系统中最重要的基本

大家好,我是本期栏目编辑小友,现在为大家讲解Linux进程的概念说明问题。

进程是Linux操作系统中最重要的基本概念之一。在这一节中,我们将学习Linux进程的一些基本知识。

进程是运行在Linux中的程序的一个实例。这是一个你可能听过的基本定义。

当你在Linux中执行一个程序时,系统会为这个程序创建一个特定的环境。这个环境包含系统运行这个程序所需的一切。

每次在Linux中执行一个命令,它都会创建或启动一个新的进程。例如,当您试图运行命令“ls -l”来列出目录的内容时,您启动了一个进程。如果屏幕上显示了两个终端窗口,那么你可能已经运行了同一个终端程序两次,然后会出现两个终端进程。

每个终端窗口都可能有一个正在运行的Shell,每个正在运行的Shell都是一个进程。当您从Shell中调用命令时,相应的程序将在新的进程中执行。当这个程序的进程被执行时,Shell的进程将恢复运行。

操作系统通过一个称为PID或进程标识的数字代码来跟踪进程。系统中的每个进程都有一个唯一的PID。

现在我们通过一个例子知道了Linux中的这个过程。我们在Shell命令行执行以下命令:

[ c.biancheng.net]$ sleep 10

[1] 3324

因为程序将等待10秒钟,所以我们可以在当前Shell上快速找到任何名为sleep的进程:

[c . biancheng . net]$ PS-ef | grep sleep

莫志艳3324 5712 cons 1 17:11:46/usr/bin/sleep

我们看到名为/usr/bin/sleep的进程正在系统中运行(它的PID与我们在前面的命令中得到的相同)。

现在,我们尝试从三个不同的终端窗口并行运行上面的sleep命令,上面命令的输出将类似于以下内容:

[c . biancheng . net]$ PS-ef | grep sleep

莫志燕896 5712 cons 1 17:16:51/usr/bin/sleep

莫志艳5924 5712 cons 1 17:16:52/usr/bin/sleep

莫志艳24245712 cons 1 17:16:50/usr/bin/sleep

我们看到睡眠程序的每个实例都创建了一个单独的进程。

每个Linux进程都有另一个id号,它是父进程(ppid)的ID。系统中的每个用户进程都有一个父进程。

命令“ps -f”将列出过程的PID和PPID。该命令的输出类似于以下内容:

[ c.biancheng.net]$ ps -f

PPIDTTY史汀生司令部

莫志艳4124 228 cons 0 21:37:09/usr/bin/PS

mozhiyan 228 1 cons 0 21:32:23/usr/bin/bash

在Shell命令提示符下运行的所有命令都将当前的Shell进程作为父进程。例如,如果在Shell命令提示符下输入ls命令,Shell将执行ls命令。此时,Linux内核将复制Shell的内存页面,然后执行ls命令。

在Unix中,每个进程都是使用fork和exec方法创建的。但是,这种方法会导致系统资源的损失。

在Linux中,fork方法是通过写时复制内存页来实现的,因此它只会造成复制父进程内存页表所需的时间和内存的损失,并为子进程创建唯一的任务结构。

写时复制模式避免了在创建新进程时创建不必要的结构副本。比如用户在Shell的命令提示符下输出ls命令,Linux内核会创建Shell的一个子进程,也就是说Shell的进程是一个父进程,而ls命令的进程是一个子进程,它会指向与这个Shell相同的内存页面,然后子进程会利用写时复制技术执行ls命令。

前台流程和后台流程。

启动进程(运行命令)时,可以通过以下两种方式运行:

前台进程

背景过程

默认情况下,您启动的每个进程都在前台运行。它从键盘接收输入,并将其输出发送到屏幕。

当一个进程在前台运行时,我们不能在同一个命令提示符下运行任何其他命令(启动任何其他进程),因为在程序完成其进程之前,命令提示符不可用。

启动后台进程的最简单方法是在命令的末尾添加一个控制运算符“”。例如,以下命令将启动后台进程:

[c.biancheng.net]$ sleep 10 &

  [1] 5720

  现在 sleep 命令被放在后台运行。当 Bash 在后台启动一个作业时,它会打印一行内容显示作业编号([1])和进程号(PID-5720)。当作业完成时,作业会发送类似如下的信息到终端程序,来显示此作业已完成,其内容类似如下所示:

  [1]+ Done sleep 10

  将进程放在后台运行的好处是:你可以继续运行其他命令,而不需要等待此进程运行完成再运行其他命令。

  进程的状态

  每个 Linux 进程都有它自己的生命周期,比如,创建、执行、结束和清除。每个进程也都有各自的状态,显示进程中当前正发生什么。

  进程可以有如下几种状态:

  D(不可中断休眠状态)——进程正在休眠并且不能恢复,直到一个事件发生为止。

  R(运行状态)——进程正在运行。

  S(休眠状态)——进程没有在运行,而在等待一个事件或是信号。

  T(停止状态)——进程被信号停止,比如,信号 SIGINT 或 SIGSTOP。

  Z(僵死状态)——标记为 《defunct》 的进程是僵死的进程,它们之所以残留是因为它们的父进程适当地销毁它们。如果父进程退出,这些进程将被 init 进程销毁。

  若要查看指定进程的状态,可以使用如下命令:

  ps -C processName -o pid=,cmd,stat

  例如:

  [c.biancheng.net]$ ps -C sleep -o pid=,cmd,stat

  CMD STAT

  9434 sleep 20 S

标签:

版权声明:转载此文是出于传递更多信息之目的。若有来源标注错误或侵犯了您的合法权益,请作者持权属证明与本网联系,我们将及时更正、删除,谢谢您的支持与理解。