首页
学习
活动
专区
圈层
工具
发布

Linux操作系统之进程(七):进程的控制(下)

在wait函数里,我们等待一个进程时,大家可以发现, 此时只有子进程在跑自己的代码,而父进程则一直停留在原地,一直到子进程结束,随后被父进程回收后,父进程才会继续运行自己的代码。...如果返回值为0,表示子进程还未返回,我们仍然需要接下来轮循调用waitpid。返回值为-1,表示等待出错误。...: 父进程是在子进程运行完成之后才继续执行自己的代码的,倘若我们把代码改一下呢:  //非阻塞等待 int main() { //如果函数运行成功,返回值id将会是子进程的pid pid_t...(这样哪怕子进程出错了,也不会影响我们的父进程的数据)。...在下次创建子进程之前,我们的父进程都不会执行waitpid的代码。

17510

【Linux】操作系统与进程

对父子进程而言,他们的进程代码是共用的,而它们的进程数据则采用写时拷贝的方式, 拷贝出的进程数据互不干扰, 可以分别使用。...这样安排的主要原因是进程间相互具有独立性, 进程代码因为不会被进程更改,所以父子共享是没问题的,但进程数据是可能被进程更改的,如果父子进程间可以互相影响数据,那么就很容易导致出错的情况。...这样会互相干扰,就会导致出事。 进程状态 ️操作系统层面进程的状态 进程状态反映进程执行过程的变化。这些状态随着进程的执行和外界条件的变化而转换。...为了高效完成任务,更合理竞争相关资源,便具有了优先级 独立性: 多进程运行,需要独享各种资源,多进程运行期间互不干扰, 因此父子进程间PCB是独立的,代码可以共享, 但数据需要写时拷贝 并行: 多个进程在多个...CPU下分别,同时进行运行,这称之为并行 并发: 多个进程在一个CPU下采用进程切换的方式,在一段时间之内,让多个进程都得以推进,称之为并发 结语 希望这篇关于 操作系统与进程 的博客能对大家有所帮助

43610
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    多线程基本概念

    线程可以理解成是在进程中独立运行的子任务。比如微信运行时就会有很多的子任务在同时运行。比如,视频线程、下载线程、表情线程、语言线程等。简单来说,一组线程互相协作完成某一个程序的一些功能供我们使用。...◆ 并发和并行 ◆ 并发和并行乍一看好像是一种东西,但是实际上区别很大。并发表示的是交替做不同事情的能力,而并行表示的是同时做不同事情的能力。...你吃饭吃到一半,电话来了,你一边打电话一边吃饭,这是并行。 我们常说的高并发系统就是说的并发而不是并行。...◆ 活锁 ◆ 多个相互协作的线程为了彼此间的响应而相互礼让,使得没有一个线程能够继续前进,那么就发生了活锁。例如两个人在一个很宅的胡同里。一次只能并排过两个人。两人比较礼貌,都要给对方让路。...,线程2又被线程3干扰,依此类推,最后线程1它又可能去干扰线程10,如果它们之间是彼此干扰的,最终会导致所有的线程都卡死在里面。

    49900

    并发篇-python多线程

    大家都知道,操作系统可以同时运行多个任务。比如你一边听音乐,一边聊微信,一遍写博客。现在的cpu大都是多核的,但即使是过去的单核cpu也是支持多任务并行执行。...由于cpu的执行速度非常快,所以使用者的主观感受就是这些任务在并行地执行。...而对于每一个进程来说,比如一个视频播放器,它必须同时播放视频和音频,就至少需要同时运行两个“子任务”,进程内的这些子任务就是通过线程来完成。线程是最小的执行单元。...一个进程它可以包含多个线程,这些线程相互独立,同时又共享进程所拥有的资源。 在Python中使用线程来避开阻塞任务 ? 线程的使用流程 ? 在任意一个进程里,任何时刻,只能执行一个线程 ?...所以Python中的线程只能实现并发,而不能实现真正的并行。 但是Python3中的GIL锁有一个很棒的设计,在遇到阻塞(不是耗时)的时候,会自动切换线程。

    87020

    Python 学习之进程与线程 「 上 」

    在一个进程内部,要同时干多件事情,就需要同时运行多个“子任务”,我们把进程内的这些“子任务”称为线程(Thread),线程是最小的执行单元。...多任务指的是操作系统可以同时运行多个任务,比如同时在聊 QQ,听音乐,码字… 单核CPU实现多任务原理:CPU执行代码都是顺序执行的,操作系统轮流让各个任务交替执行,QQ 执行 2us 秒,切换到听音乐...__main__": while 1: print("执行父进程") # 父进程不结束,子进程无法开始 sleep(1) run() # 不会执行到...run 方法,只有上面的 while 循环结束才可以执行 运行结果 多进程(任务)现象 1.任务间互不干扰 启动进程执行多任务,各个任务间互不干扰。...任务间相互干扰 事实上同时执行的各个任务之间并不是没有关联的,而是需要相互通信和协调,有时,任务1必须暂停等待任务 2 完成后才能继续执行,有时,任务 3 和任务 4 又不能同时执行。

    43720

    Android 开发艺术探索笔记二

    intent.addFlags(Intent.FLAG_EXCLUDE_STOPPED_PACKAGES)表示在android 5.0中,默认情况下广播不会发送给已经停止的应用,而FLAG_INCLUDE_STOPPED_PACKAGES...在handler内部可以通过ThreadLocal来获取每个线程的Looper,它可以在不同线程互不干扰存储并提供数据。...通过Looper.prepare()创建Looper,Looper.loop()开启消息循坏 可以在主线程中创建Looper调用prepareMainLooper,调用getMainLooper在主线程获取...线程池 线程池优点 重用线程池,避免因线程创建与销毁而带来的性能开销 有效控制线程的并发数,避免因线程互相抢占资源而导致阻塞现象 能够对线程进行简单管理,提供定时执行与间隔循坏功能 Executor Executor...Excecutors.newWorkStealingPool:JDK8引入,创建持有足够线程的线程池支持给定的并行度,并通过使用多个队列减少竞争,把CPU数量设置为默认的并行度。

    2.4K10

    操作系统知识清单

    也就是说互斥是两个线程之间不可以同时运行,他们会相互排斥,必须等待一个线程运行完毕,另一个才能运行,而同步也是不能同时运行,但他是必须要安照某种次序来运行相应的线程(也是一种互斥)。...并发,并行;互斥,同步,异步; 并发:是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行。...在 fork 时,所有的变量具有一样的值,虽然父进程的数据被复制用以创建子进程,但是其中一个的后续变化并不会影响到另一个。(由父进程和子进程共享的程序正文,是不可改变的。)...它从终端读取命令,创建一个子进程,等待该子进程执行命令,在该子进程终止时,读入下一条命令。...在键入一条命令后,shell 调用 fork 创建一个新的进程。这个子进程必须执行用户的命令。

    38900

    teprunner测试平台Django引入pytest完整源码

    为了提高运行效率,用例运行是并行的,采用了多线程和多进程,两个都有,这在最后有个单独小结进行比较完整的说明。...然后删掉数据库运行结果,通过subprocess起子进程调用pytest命令,最后在线程的回调函数中根据pytest_result保存用例结果到数据库中。 注意!...case_result按照用例id和运行人存的多条,每个运行人都有一条属于自己的运行数据,避免数据相互干扰,返给前端的是运行时间最新的那一条! 继续: ?...前后端是在以用例id作为房间名的房间中,相互传递消息的。多个浏览器的数据不会互串,因为Django Server默认是多线程!...同理,多个浏览器同时运行用例,默认它们就是并行不是串行的,不会存在等待执行的情况,从前面代码可以知道,pytest命令是用subprocess子进程方式调用的,为了看到效果,我找了一个比较慢的Case,

    1.3K40

    Grafana Loki 架构

    Loki 运行模式 Loki 针对本地运行(或小规模运行)和水平扩展进行了优化吗,Loki 带有单一进程模式,可在一个进程中运行所有必需的微服务。单进程模式非常适合测试 Loki 或以小规模运行。...Loki 运行哪个组件取决于命令行中的 -target 标志或 Loki 的配置文件中的 target: 部分。...当以单体模式运行组件时,仍然是这样的:尽管每个组件都以相同的进程运行,但它们仍将通过本地网络相互连接进行组件之间的通信。...队列 查询前端的排队机制用于: 确保可能导致 querier 出现内存不足(OOM)错误的查询在失败时被重试。这允许管理员可以为查询提供不足的内存,或者并行运行更多的小型查询,这有助于降低总成本。...如果缓存的结果不完整,查询前端会计算所需的子查询,并在下游 querier 上并行执行这些子查询。查询前端可以选择将查询与其 step 参数对齐,以提高查询结果的可缓存性。

    4.1K51

    【多线程】进程和线程的区别与联系

    操作系统的职责是: 负责管理硬件设备; 为计算机中的各种软件设备提供一个稳定的运行环境(指多个应用程序在同时运行的时候不会互相干扰) 二、进程 / 任务(Process / Task) 2.1 什么是进程...现代 cpu 在运行进程的时候,并发和并行是同时存在的。...即使在进程运行的过程中销毁某个线程,也不会释放资源。 进程与进程之间,所涉及到的资源都是相互独立的,彼此之间是不会相互干扰的。...,即使在进程运行的过程中销毁某个线程,也不会释放资源。...进程与进程之间,所涉及到的资源都是相互独立的,彼此之间是不会相互干扰的。而一个进程内部的线程与线程之间,是会相互影响的。 进程是操作系统资源分配的基本单位,线程是操作系统调度执行的基本单位。 完

    44710

    Linux 下自动化工具 Parallel SSH 中文使用指南

    source/default/source $ tar zxvf pssh-2.3.1.tar.gz $ cd pssh-2.3.1 $ python setup.py install # 工具对应的子命令子命令.../libexec/bin/pssh-askpass pssh 通过 ssh 协议在多台主机上并行地运行命令 命令参数使用 适用范例 # Usage: pssh [OPTIONS] command [...] # 在两个主机上运行命令并在每个服务器上打印其输出 $ pssh -i -H "host1 host2" hostname -i # 运行命令并将输出保存到单独的文件中 $ pssh -H host1...-i # 运行带有额外SSH参数的命令 $ pssh -i -h path/to/hosts_file -x "-O VisualHostKey=yes" hostname -i # 运行并行连接数量限制为...将远程主机上面的文件复制到本地 $ pslurp -h hosts.txt -l root -L /tmp/outdir /home/irb2/foo.txt foo.txt 5. pnuke 通过 ssh 协议并行地在多个远程主机上杀死进程

    2.1K40

    【Python】高级笔记第六部分:多任务编程

    这是我们看得到的任务,在系统中还有很多系统任务在执行,现在的操作系统基本都是多任务操作系统,具备运行多任务的能力。...什么是多任务编程 多任务编程即一个程序中编写多个任务,在程序运行时让这多个任务一起运行,而不是一个一个的顺次执行。...比如微信视频聊天,这时候在微信运行过程中既用到了视频任务也用到了音频任务,甚至同时还能发消息。这就是典型的多任务。而实际的开发过程中这样的情况比比皆是。...子进程只执行指定的函数,其余内容均是父进程执行内容,但是子进程也拥有其他父进程资源。 各个进程在执行上互不影响,也没有先后顺序关系。 进程创建后,各个进程空间独立,相互没有影响。...请求和保持条件:指线程已经保持至少一个资源,但又提出了新的资源请求,在获取到新的资源前不会释放自己保持的资源。 不剥夺条件:不会受到线程外部的干扰,如系统强制终止线程,设置最长等待时间等。

    86760

    Linux 下自动化工具 Parallel SSH 中文使用指南

    # 工具对应的子命令子命令 $ ls -lh /usr/local/Cellar/pssh/2.3.1_1/bin/ pnuke -> .....pssh 通过 ssh 协议在多台主机上并行地运行命令 命令参数使用 ? 适用范例 # Usage: pssh [OPTIONS] command [......] # 在两个主机上运行命令并在每个服务器上打印其输出 $ pssh -i -H "host1 host2" hostname -i # 运行命令并将输出保存到单独的文件中 $ pssh -H host1...-i # 运行带有额外SSH参数的命令 $ pssh -i -h path/to/hosts_file -x "-O VisualHostKey=yes" hostname -i # 运行并行连接数量限制为...将远程主机上面的文件复制到本地 $ pslurp -h hosts.txt -l root -L /tmp/outdir /home/irb2/foo.txt foo.txt pnuke 通过 ssh 协议并行地在多个远程主机上杀死进程

    73120

    开发 | TensorFlow Agents日前开源,轻松在TF中构建并行强化学习算法

    如果想要重新开始运行之前的任务,可以在最后的指令中增加--timestamp=标志,并提供你运行的目录名中的时间戳。...,请输入如下代码: python3 -m unittest discover -p "*_test.py" 如果有更多问题,可以在 Github上提问。...Gym 环境的包装(wrapper),它可以调用step()、reset()以及属性访问,转发到进程中,然后等待结果,可以并行运行多个环境而不受Python全局解释器锁(global interpreter...如果有多个独立的环境在外部进程中,它们将能被并行处理。...agents.tools.simulate() agents.tools.simulate()将in-graph batch环境和强化学习算法融合成一步,可以在训练循环中调用,这减少了调用会话的数量,并提供了一种简单的方法来训练接下来的算法

    1.3K90

    「笔记」理解Linux进程

    # 获取上一条命令退出码 1 ? image.png 进程文件 在Linux中“一切皆文件”,进程的一切运行信息(占用CPU、内存等)都可以在文件系统找到,例如看一下PID为1的进程信息。...信号 信号只是告诉进程发生了什么事件,而不会传递任何数据。Linux中定义了很多信号,不同的Unix-like系统也不一样,我们可以通过下面的命令来查当前系统支持的种类。...不可靠信号和可靠信号的区别在于前者不支持排队,可能会造成信号丢失,而后者不会。在命令行中止一个程序我们一般摁Ctrl+C,这就是发送SIGINT信号,而使用kill命令呢?...这三个文件描述符是每个进程都有的,这也解释了为什么每个进程都有编号为0、1、2的文件而不会与其他进程冲突。...共享内存 不同进程之间内存空间是独立的,也就是说进程不能访问也不会干扰其他进程的内存。如果两个进程希望通过共享内存的方式通信呢?可以通过mmap()系统调用实现。

    1.1K40

    进程与线程的区别

    在单个程序中同时运行多个进程完成不同的工作,称为多进程。 上面使用进程来管理单个程序不同功能模块,使单个程序的不同功能模块可以并行执行。使用进程来管理程序,也可以使多个程序之间并发执行。...线程也有就绪、运行和阻塞三种基本状态。在单个进程中同时运行多个线程完成不同的工作,称为多线程。 进程和线程都是程序运行时衍生的概念,容易混淆,下面说一下具体的区别。 (1)定义不同。...进程是系统分配资源的独立单元,而线程是执行和调度的基本单元; (2)所属不同。进程属于程序,线程属于进程。进程结束后它拥有的所有线程都将销毁,而线程的结束不会影响同个进程中的其他线程。...因为进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不同执行路径,一个线程死掉,整个进程也会死掉。所以进程的安全性会高于线程。...因此,并发意味着多个执行实体(人)需要竞争资源(咖啡机),就不可避免带来竞争和同步的问题;而并行则是不同的执行实体拥有各自的资源,相互之间互不干扰。

    1.2K31

    匿名管道的应用:手把手模拟实现进程池

    在子进程完成任务后,继续让子进程通过read来等待(这里就应用了我们上文提到的现象1:管道为空&&管道正常,read会阻塞),直到父进程再次给子进程分配任务。...同时,我们需要创建子进程,那么要创建多少个呢? 为了实现一个动态子进程数量的创建,我们可以巧妙利用命令行参数列表。规定运行代码时需要带上创建的进程数量。随后根据argc参数判断输入的格式是否正确。...随后在这个函数里,我们要实现随机挑选一个函数(在我们task.hpp中我们初始化了一个全局变量),调用全局变量的类函数进行挑选,并按照轮循顺序,向该进程管道中写入任务的下标信息: void DispatchTask...bug,让我为大家揭晓 三、优化bug与代码 在我们之前的代码中,存在一个巨大的隐患,如果我们把close与waitpid的代码合并到一个for循环中(因为都是同样的顺序),就会出现bug: void...你后面只close了一次,根本不会关闭这个管道啊。 所以,你的子进程仍然在进行无限的read循环,就没有退出。 而你的子进程没有退出,自然就在waitpid这里阻塞住了!!!

    13510

    分布式计划任务设计与实现

    分布式计划任务的部署 两个节点部署 两个节点可以实现“主”、“备”方案,队列(排队)运行方案与并行方案,其中并行方案又分为不同运行于异步运行,还涉及到互斥运行。...两个以上节点部署 多节点建议采用队列运行方案,并行方案,但不建议使用互斥并行方案(浪费资源) 5....任务轮循或任务轮循+抢占排队方案 任务轮循或任务轮循+抢占排队方案 每个服务器首次启动时加入队列。 每次任务运行首先判断自己是否是当前可运行任务,如果是便运行。...否则检查自己是否在队列中,如果在,便推出,如果不在队列中,便加入队列。 6.1. 分布式互斥锁 互斥锁也叫排它锁,用于并发时管理多进程或多线程同一时刻只能有一个进程或者线程操作一个功能。...我们将进程,线程中的锁延伸到互联网上,实现对一个节点运行的进程或线程加锁,解锁操作。这样便能控制节点上进程或线程的并发。

    1.7K70

    PyHero爱之初体验(上)~

    1.urllib是Python中请求url连接的官方标准库,在Python2中主要为urllib和urllib2,在Python3中整合成了urllib。...Python内置库:threading(多线程操作) Python的线程操作在旧版本中使用的是thread模块,在Python2.7和Python3中引入了threading模块,同时thread...因为我现在是win平台,先往下看 4.subprocess 一、subprocess以及常用的封装函数 运行python的时候,我们都是在创建并运行一个进程。...像Linux进程那样,一个进程可以fork一个子进程,并让这个子进程exec另外一个程序。在Python中,我们通过标准库中的subprocess包来fork一个子进程,并运行一个外部的程序。...subprocess包中定义有数个创建子进程的函数,这些函数分别以不同的方式创建子进程,所以我们可以根据需要来从中选取一个使用。

    70460

    并发模型的一些概念以及设计探讨

    进程和线程的区别 进程是操作系统资源分配的基本单位 线程是CPU调度的基本单位 从操作系统层面去看是进程,从CPU层面去看是线程 进程的空间是独立,各个进程相互不干扰,每个进程拥有自己的进程内存,上下文环境...数据共享简单,但同步比较复杂,需要锁操作 创建和销毁 进程是重量级的,创建和销毁都比较复杂 线程是一种轻量级的进程,创建和销毁简单 编程和调试 复杂 简单 可靠想 进程之间相互独立,不会影响,一个进程挂掉不会影响其它进程...从操作系统系统层面考量的并发模型 1、多进程单线程 这种并发模型是应用程序启动后主进程会预先创建一些子进程出来,每来一个请求都会由一个子进程处理请求,这种模型会比较稳定,进程之间不干扰,也不会产生线程安全问题...,同时也可以引入一些第三方的非线程安全的模块进来,但内存消耗较大,创建进程对内存的消耗会比较大,并且cpu在多个进程间来回切换开销也大,所以一般子进程不宜过多。...典型的一些开源软件如Apache服务器在Apahce2.X之后新增了并行处理模块(MPM->Multi-Processing-Modules)Prefork就是这种并发模型 2、多进程多线程 这种并发模型是在上面多进程的并发模型上演化而来

    89440
    领券