一个执着于技术的公众号

进程

进程,是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。它的执行需要系统分配资源创建实体之后,才能进行。举个例子:我们所写的程序,在运行的时候它也是一个进程。

进程和程序的区别:程序相当于是一个文件,是有序代码的集合,是静态的存储在硬盘中。而进程是运行中的程序,系统会为变量分配相应的内存和初始化它们的值,还有一些资源如:堆、栈等;当程序运行完进程也就结束了,但程序还是保存在硬盘中没有消失。

进程的特性

①并发性:可以与其它进程在宏观上同时向前推进。

②动态性:进程是执行中的程序,动态产生、动态消亡、动态变化。

③独立性:进程是系统资源分配的基本单位。

④交互性:与其它进程可以进行交互。

⑤异步性:不统一推进。

⑥结构性:每个进程有一个控制块PCB。

⑦并行性:只有在多CPU多处理器的计算机上,进程才能并行执行。

并发性和并行性的区别:

并发性是在宏观上的同时向前推进,CPU使用时间轮转机制对进程进行调度,可能一个进程占用CPU短短10ms就切换去执行另一个进程了,而我们的肉眼是不可能看到这种细微的变化,所以我们在宏观概念上认为它是同时推进的,这就是并发性。(一定是在宏观上)

并行性就是真正意义上的一起推进,就是多个进程在同一时间被一起执行。但是上面也提到过,想要支持进程并行,必须是多CPU的计算机。

一个进程中如何创建多个进程

创建进程有两种方式:一种是操作系统创建,另一种是父进程创建。父进程创建的进程(通常称为子进程),它们和父进程存在隶属关系。子进程又可以创建进程,这样形成一个进程家族。子进程可以继承其父进程几乎所有的资源。

孤儿进程

孤儿字面意思就是没有父母的孩子,那孤儿进程的意思就是没有父进程的进程。这种情况是怎么发生的呢?就是父进程先于子进程结束,这时子进程被init进程收养,init的进程号为1。

僵尸进程

当一个子进程终止时,如果它的父进程还在运行,内核会为这个终止的子进程保留一定量的信息。父进程可以根据这些信息知道子进程的情况。直到父进程对其进行了善后处理,子进程才会完全终止。在这期间,父进程没有回收子进程并释放子进程占用的资源,这个子进程会成为僵尸进程,它仍然占用一定资源。

进程终止

①从main函数返回 return()。

②调用 exit()。

③调用 _exit()或 _Exit()。

④最后一个线程从其启动例程返回。

⑤最后一个线程调用 pthread_exit()。

⑥调用 abort()它产生 SIGABRT 信号。

⑦收到一个信号并终止。

⑧最后一个线程对取消请求作出相应。

进程组

每个进程都属于某个进程组。进程组是一个或多个进程的集合。通常它们与同一作业相关联,可以接收来自同一终端的各种信号。每个进程组有一个唯一的进程组ID。每个进程组都有一个组长进程,进程ID等于进程组ID的进程就是组长进程。

会话

会话(session)是一个或多个进程组的集合。

竞态条件

当多个进程都企图对共享数据进行某种处理时,而最后的结果又取决于进程运行的顺序时,我们认为发生了竞态条件(race condition)。如果fork之后的某种逻辑显式或隐式地依赖于在fork之后是父进程先运行还是子进程先运行,那么fork函数就会是竞争条件活跃的滋生地。通常,我们都是不可以预估子进程和父进程哪个先运行。因为进程的运行顺序完全取决于内核的调度算法和系统的负载。

我们可以调用wait或者waitpid函数来让父进程等待子进程运行完之后在运行,这样父进程就会被阻塞住,直到子进程运行完毕之后才能运行,其实这样做的效率就比较低,我们fork就是希望多进程并发的执行,如果采用此方法,则fork也就失去了很大的意义。

为了避免竞争条件和不采用wait或waitpid方法,我们可以在多进程之间采用发送和接收信号的处理方法来避免竞态条件。或者各种进程间的通信方式(IPC)也可以使用。

来自:小组17级成员--朱文博

链接:https://blog.csdn.net/weixin_42250655/article/details/81567643

往期精彩

◆  必看 | Linux系列学习书籍免费送

◆  利用expect批量修改Linux服务器密码

◆  Linux运维工程师面试问答录

◆  LVM逻辑卷学习

◆  Linux网络重点知识总结性梳理

◆  抓包工具tcpdump用法说明

◆  一文带你速懂虚拟化KVM和XEN

◆  实战 | Hadoo大数据集群搭建

◆  运维工程师心法:6大技能让你告别背锅

◆  亿级web系统负载均衡几种实现方式

好文和朋友一起看~

Linux进程总结的更多相关文章

  1. Linux进程管理及while循环

    目录 进程的相关概念 进程查看及管理工具的使用 Linux系统作业控制 调整进程优先级 网络客户端工具 bash之while循环 20.1.进程类型 守护进程 daemon,在系统引导过程中启动的进程 ...

  2. 如何灵活运用Linux 进程资源监控和进程限制

    导读 每个 Linux 系统管理员都应该知道如何验证硬件.资源和主要进程的完整性和可用性.另外,基于每个用户设置资源限制也是其中一项必备技能. 在这篇文章中,我们会介绍一些能够确保系统硬件和软件正常工 ...

  3. TODO:Golang Linux进程退出说明

    TODO:Golang Linux进程退出说明 Golang使用os.Exit(code)进程退出导致当前程序退出并返回给定的状态代码.传统上,code代码为零表示成功退出,非零错误退出. sysca ...

  4. Linux进程管理子系统分析【转】

    本文转载自:http://blog.csdn.net/coding__madman/article/details/51298732 Linux进程管理: 进程与程序: 程序:存放在磁盘上的一系列代码 ...

  5. 12个Linux进程管理命令介绍(转)

    12个Linux进程管理命令介绍 [日期:2015-06-02] 来源:Linux中国  作者:Linux [字体:大 中 小]   执行中的程序在称作进程.当程序以可执行文件存放在存储中,并且运行的 ...

  6. linux 进程管理相关内容

    简介 当我们运行程序时,Linux会为程序创建一个特殊的环境,该环境包含程序运行需要的所有资源,以保证程序能够独立运行,不受其他程序的干扰.这个特殊的环境就称为进程. 每个 Linux 命令都与系统中 ...

  7. Linux - 进程查看与管理

    标签(空格分隔): Linux 进程的静态查看 查看系统所有进程 ps -ef -- 输出来好乱,看不懂..: ps aux -- a表示所有与终端相关的进程,u表示所有以用户组织的进程状态的信息,x ...

  8. Linux进程关系

    Linux进程关系   作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! Linux的进程相互之间有一定的关系.比如说,在Linux ...

  9. Linux进程基础

    Linux进程基础   作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 计算机实际上可以做的事情实质上非常简单,比如计算两个数的和 ...

  10. linux进程编程:子进程创建及执行函数简介

    linux进程编程:子进程创建及执行函数简介 子进程创建及执行函数有三个: (1)fork();(2)exec();(3)system();    下面分别做详细介绍.(1)fork()    函数定 ...

随机推荐

  1. RabbitMQ 的集群?

    镜像集群模式 你创建的 queue,无论元数据还是 queue 里的消息都会存在于多个实例上,然后每次你写消息到 queue 的时候,都会自动把消息到多个实例的 queue 里进行消息同步. 好处在于 ...

  2. consumer提交offset原理

    1 数据结构 消费者的消费状态是保存在SubscriptionState类中的,而SubscriptionState有个重要的属性那就是assignment保存了消费者消费的partition及其pa ...

  3. 什么是 Callable 和 Future?

    Callable 接口类似于 Runnable,从名字就可以看出来了,但是 Runnable 不会返 回结果,并且无法抛出返回结果的异常,而 Callable 功能更强大一些,被线程执 行后,可以返回 ...

  4. 学习k8s(三)

    一.Kubernetes核心概念 1.Kubernetes介绍 Kubernetes(k8s)是自动化容器操作的开源平台,这些操作包括部署,调度和节点集群间扩展.如果你曾经用过Docker容器技术部署 ...

  5. MTK平台电路设计01

    一.资料 获取途径MTK官网.一牛网 二.

  6. c++语法拾遗,一些细节与特性

    写了2年多的C+STL的acmer,在学习<C++ primer>时总结的一些少见的语法特性与细节.总体还是和题目说的一样这是一篇 c++ 拾遗. 1 变量和基本类型 1.1 基本类型 1 ...

  7. mapreduce分区

    本次分区是采用项目垃圾分类的csv文件,按照小于4的分为一个文件,大于等于4的分为一个文件 源代码: PartitionMapper.java: package cn.idcast.partition ...

  8. Ubuntu安装docker-compose(摘自官网,自用)

    安装 Docker Compose 预计阅读时间:8分钟 加速 Docker 桌面中的新功能 Docker Desktop 可帮助您在 Mac 和 Windows 上轻松构建.共享和运行容器,就像在 ...

  9. golang 中 sync.Mutex 的实现

    mutex 的实现思想 mutex 主要有两个 method: Lock() 和 Unlock() Lock() 可以通过一个 CAS 操作来实现 func (m *Mutex) Lock() { f ...

  10. 在线操作word和在线预览查找的资料记录

    在线操作word和在线预览查找的资料记录 在线操作word查找的资料记录 富文本操作 http://fex.baidu.com/ueditor/ 控件类 通过 js 调用控件操作 word 文档 1. ...