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

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

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

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

每个终端窗门可能都运行了一个 Shell,每个运行的 Shell 都分别是一个进程。当你从 Shell 调用一个命令时,对应的程序就会在一个新进程中执行,当这个程序的进程执行完成后,Shell 的进程将恢复运行。

操作系统通过被称为 PID 或进程 ID 的数字编码来追踪进程。系统中的每一个进程都有一个唯一的 PID。

现在我们通过一个实例来了解 Linux 中的进程。我们在 Shell 命令行下执行如下命令:

[c.biancheng.net]$ sleep 10 &

[1] 3324

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

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

mozhiyan 3324 5712 cons1 17:11:46 /usr/bin/sleep

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

现在,我们尝试并行地从 3 个不同的终端窗口运行上述的 sleep 命令,上述命令的输出将类似如下所示:

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

mozhiyan 896 5712 cons1 17:16:51 /usr/bin/sleep

mozhiyan 5924 5712 cons1 17:16:52 /usr/bin/sleep

mozhiyan 2424 5712 cons1 17:16:50 /usr/bin/sleep

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

每个 Linux 进程还有另一个 ID 号码,即父进程的 ID(ppid)。系统中的每一个用户进程都有一个父进程。

命令“ps -f”就会列出进程的 PID 和 PPID。此命令的输出类似如下所示:

[c.biancheng.net]$ ps -f

UID PID PPID TTY STIME COMMAND

mozhiyan 4124 228 cons0 21:37:09 /usr/bin/ps

mozhiyan 228 1 cons0 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 命令的进程是子进程,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(僵死状态)——标记为 的进程是僵死的进程,它们之所以残留是因为它们的父进程适当地销毁它们。如果父进程退出,这些进程将被 init 进程销毁。

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

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

例如:

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

CMD STAT

9434 sleep 20 S

linux中什么是进程名,Linux进程是什么相关推荐

  1. Linux中的两种守护进程stand alone和xinetd

    Linux中的两种守护进程stand alone和xinetd --http://www.cnblogs.com/itech/archive/2010/12/27/1914846.html#top 一 ...

  2. Linux中的各种栈:进程栈 线程栈 内核栈 中断栈

    Linux中的各种栈:进程栈 线程栈 内核栈 中断栈 栈的作用 1. 函数调用 2. 多任务支持 Linux 中有几种栈?各种栈的内存位置? 1. 进程栈 2. 线程栈 3. 进程内核栈 4. 中断栈 ...

  3. 在linux中的sort命令,linux中sort命令

    功能说明:将文本文件内容加以排序,sort可针对文本文件的内容,以行为单位来排序. 参 数: -b 忽略每行前面开始出的空格字符. -c 检查文件是否已经按照顺序排序. -d 排序时,处理英文字母.数 ...

  4. linux中文件链接,关于Linux中文件,链接的一些思考

    在Unix系统中,操作系统为磁盘上的文本与图像,鼠标键盘操作,网络交互等IO操作设计了一组通用API. 使他们被处理的时候可统一用字节流的方式.所以说,除了进程之外,其他的一切均可看做文件. Linu ...

  5. linux中make命令大全,Linux中的命令 make -f 是什么意思

    二.Makefile的文件名 默认的情况下,make命令会在当前目录下按顺序找寻文件名为"GNUmakefile"."makef ile"."Make ...

  6. linux中original_如何在 Linux 中整理磁盘碎片

    如何在 Linux 中整理磁盘碎片 转载自: 如何在 Linux 中整理磁盘碎片​linux.cn 有一个神话是 linux 的磁盘从来不需要整理碎片.在大多数情况下这是真的,大多数因为是使用的是优秀 ...

  7. linux中用户组和用户,linux中用户和用户组

    一.用户和组原理 一个用户可以属于多个组,一个组有多个用户 在Linux中操作系统必须依赖组和用户进行管理 二.与用户和组相关的配置文件 1.组相关配置文件 1)/etc/group :管理用户组信息 ...

  8. 网页修改linux命令行,linux中文本修改操作命令linux网页制作 -电脑资料

    在命令模式下可以使用 vi 提供的各种有关命令对文本进行修改,包括对文本内容的删除.复制.取代和替换等, 1. 文本删除/移动 在编辑文本时 ,经常需要删除一些不需要的文本,我们可以用键将输错或不需要 ...

  9. Linux 中的各种栈:进程栈 线程栈 内核栈 中断栈

    栈是什么?栈有什么作用? 首先,栈 (stack) 是一种串列形式的 数据结构.这种数据结构的特点是 后入先出 (LIFO, Last In First Out),数据只能在串列的一端 (称为:栈顶 ...

  10. Linux系统编程35:多线程之如何理解Linux中的线程以及轻量级进程LWP

    文章目录 (1)由"进程"到进程 (2)进程,线程和轻量级进程 A:进程和线程的关系 B:Linux中没有真正意义上的线程 C:轻量级进程-LWP (3)线程的优缺点 A:优点 B ...

最新文章

  1. 继承项目第13周-项目1-基类中成员的访问限定符和派生类的继承方式
  2. 自制精排 ePub 集、不定期更新(UPDATA-2015-8-2)
  3. [模仿微软Live.cn]JavaScript输入邮箱自动提示
  4. Caffe和MATLAB
  5. RPC协议与Web Service
  6. MATLAB读取text文件数据,拟合曲线
  7. Django-ModelFrom中修改save后的字段值
  8. io hang linux 原理,Linux 避免IO hang
  9. C/C++ Socket编程Http下载的简单实现
  10. adb如何使用javac编译java程序并且运行
  11. 山东大学高频电子线路实验三 正弦波振荡器实验详解
  12. SQL连接查询总结和练习
  13. Java 导出word和pdf_Java实现word导出与pdf导出
  14. 使用无线网桥安装电梯监控图解
  15. Android 性能优化四个方面总结
  16. 设计PCB螺旋线圈、电感线圈
  17. flyway版本号_使用flyway作为数据库版本工具
  18. 北京工作居住证办理条件及用途
  19. COMP 3023代写、代写COMP 3023、代做 C++ - Assignment、 代编码C++ - Assignment
  20. ICPC 2018 南京站游记

热门文章

  1. 浅谈DDos******与防御
  2. 网络模拟器NS-2及其应用分析
  3. 模式实例之——中介者实例
  4. springmvc 基础内容
  5. isp mpls专线
  6. 第三方接口,消息保障性发送机制
  7. java的IO总结(一)
  8. Maven入门实战笔记-11节[7-11]
  9. Hadoop在业界的使用情况
  10. 如何禁止开机时进入安全模式