首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

初识Linux · 进程等待

那么本文,我们来学习进程等待,我们从三个方面来看,进程等待是什么?为什么要等待等待是在做什么?从以上几个方面,相信同学对于Linux中的进程等待有更深层次的理解。...进程等待是什么 思考:什么情况下会发生等待的情况? 情况实例:父进程创建了子进程,父进程任务结束,子进程还没有结束,父进程需要等待子进程退出。这种情况就是等待。 那么不等待会引发的后果是什么呢?...进程等待都在做什么 前面两点,即便是没有学习过进程等待的都应该知道有那么回事,今天的重点实际上是在等待子进程的时候父进程是在做什么。...不完全是的,父进程等待的时候分为两种等待,一种是阻塞等待,一种是非阻塞等待,对于阻塞等待,就像scanf,输入数据之后,需要等待键盘数据就绪,这是一种阻塞,而子进程本质也是软件,父进程实际上就是等待该软件就绪...至于等待的三种情况,等待成功,pid_t返回的值是大于0,==0代表的是等待成功,但是子进程正准备结束了,< 0代表的是等待失败。

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

    Linux修炼】11.进程的创建、终止、等待程序替换

    进程的创建、终止、等待程序替换 本节重点 1. 进程的创建 1.1 fork函数初识 1.2 fork的返回值问题 1.3 写时拷贝 1.4 创建多个进程 2....进程等待 3.1 进程等待的原因 3.2 进程等待的方法 3.3 再谈进程退出 3.4 进程的阻塞和非阻塞等待 4....进程的程序替换 4.1 见见猪跑 4.2 理解原理(是什么、为什么、怎么办) 4.3 一个一个调用对应的方式 4.4 应用场景:模拟shell命令行解释器 本节重点 进程的创建,终止,等待,进程的程序替换...在linux中fork函数是非常重要的函数,它从已存在进程中创建一个新进程。新进程为子进程,而原进程为父进程。...我们知道一个程序要想运行必须加载到内存中让CPU去执行,而对于LinuxOS来说,程序加载是通过exec系列的函数加载到内存中的,因此Linux中的exec系列函数也被称为加载器。

    6.2K00

    如何在Linux挂起和恢复进程?

    Linux操作系统中,挂起和恢复进程是一种管理和控制运行中进程的重要操作。挂起进程将其置于休眠状态,而恢复进程则重新激活它们以继续执行。...本文将详细介绍如何在Linux挂起和恢复进程,包括使用常见的命令和工具进行操作。挂起进程在Linux中,可以使用kill命令和特定的信号来挂起进程。...以下是在Linux挂起进程的步骤:首先,需要获取要挂起进程的进程ID(PID)。可以使用ps命令或pgrep命令来查找进程ID。...使用工具挂起和恢复进程除了使用kill命令外,Linux还提供了其他一些工具和方法来挂起和恢复进程。下面介绍两个常用的工具:1. killall命令killall命令用于根据进程名称挂起或终止进程。...总结挂起和恢复进程是Linux中常用的管理和控制进程的操作之一。通过挂起进程,可以将其置于休眠状态,暂停其执行;而恢复进程则重新激活进程,使其继续执行。

    2.8K40

    LinuxLinux进程控制>进程创建&&进程终止&&进程等待&&进程程序替换

    1.进程创建 1.1 fork函数 在linux中fork函数时非常重要的函数,它从已存在进程中创建一个新进程。...例如,父进程等待客户端请求,生成子进程来处理请求 一个进程要执行一个不同的程序。.../a.out #等20秒退出 child exit code:10 [root@localhost linux]# ....shell建立一个新的进程,然后在那个进程中运行ls程序等待那个进程结束 然后shell读取新的一行输入,建立一个新的进程,在这个进程中运行程序等待这个进程结束。...Linux鼓励将这种应用于程序之内的模式扩展到程序之间。如下图 一个C程序可以fork/exec另一个程序,并传给它一些参数。这个被调用的程序执行一定的操作,然后通过exit(n)来返回值。

    15210

    Linux进程控制——Linux进程等待

    前言:接着前面进程终止,话不多说我们进入Linux进程等待的学习,如果你还不了解进程终止建议先了解: Linux进程终止 本篇主要内容: 什么是进程等待 为什么要进行进程等待 如何进程等待...进程等待的概念 首先在开始之前我们提个问题,到底什么是进程等待?...进程等待的概念: 我们通常说的进程等待其实是通过wait/waitpid的方式,让父进程(一般)对子进程进行资源回收的等待过程,父进程必须等待这个子进程结束后,处理它的代码和数据! 2....进程等待必要性 在了解完进程等待的概念后,新的问题出现了,我们为什么要进行进程等待,进程等待的必要性是什么?...因为我们知道了status不能整体使用因此我们要进行位操作: exit sig: status&0x7f //获取信号 exit code: (status>>8)&0xff //获取退出结果 当我们的程序异常了

    10810

    Linux】详解进程终止&&进程等待

    这就是为什么当我们要对常量字符串的内容做修改程序运行阶段会报错的底层原因。         通过页表的权限位,我们也可以很好地解释写时拷贝是如何做到的。...三、进程等待 3.1、进程等待的必要性 1、之前讲过,子进程退出,父进程如果不管不顾,就可能造成‘僵尸进程’的问题,进而造成内存泄漏。...调用wait函数父进程默认进行阻塞等待,会等待任意一个子进程退出。等待成功,wait会返回子进程的pid,等待失败返回小于0的值。 ...int变量的地址,可以查看子进程的退出码), options参数设置为0表示阻塞等待,设置为宏 WNOHANG表示非阻塞等待。...阻塞等待时父进程会阻塞在waitpid这里一直等待子进程返回,非阻塞等待采用轮询的方法查看子进程的退出信息,在轮询的间隙父进程可以继续做别的工作。

    27010

    Linux进程控制【创建、终止、等待

    main 函数中的最后一条语句 return 0 表示当前程序的退出码,0 表示程序正常退出,可以通过指令 echo $?...ctrl + c 终止前台运行中的程序 内部终止是通过函数 exit() 或 _exit() 实现的 之前在程序编写时,发生错误行为时,可以通过 exit(-1) 的方式结束程序运行,代码中任意地方调用此函数...: exit() 是对 _exit() 做的封装实现 _exit() 就只是单纯的退出程序 而 exit() 在退出之前还会做一些事,比如冲刷缓冲区,再调用 _exit() 程序中输出语句位于输出缓冲区...,父进程通过 等待轮询 的方式,在子进程执行的同时,执行其他任务 当然也可以通过 kill -9 PID 命令使子进程异常终止 可以看到程序能分别捕捉到正常和异常的情况 注意: 如果不写进程等待函数...,会引发僵尸进程问题 ---- 总结 以上就是关于 Linux进程控制(创建、终止、等待) 的相关知识了,我们学习了 子进程 是如何被创建的,创建后又是如何终止的,以及 子进程 终止 父进程 需要做些什么

    30810

    Linux】进程控制(创建、终止、等待)

    环境:centos7.6,腾讯云服务器 Linux文章都放在了专栏:【Linux】欢迎支持订阅 相关文章推荐: 【Linux】冯.诺依曼体系结构与操作系统 【Linux】进程理解与学习Ⅰ-进程概念...【Linux】进程理解与学习Ⅱ-进程状态 【Linux】进程理解与学习Ⅲ-环境变量 【Linux】进程理解与学习Ⅳ-进程地址空间 浅谈Linux下的shell--BASH 【Linux】进程优先级...我们在Linux下可以通过echo $?指令查看最近的进程的退出码。 ​...而exit可以说是_exit的封装,如下: ​  退出结果 对于一个进程的退出结果,无非就以下三种情况: 程序正常退出,且执行结果正确 程序正常退出,且执行结果错误 程序异常 进程退出的进一步理解...而子进程的执行结果是否正确则是由程序员根据退出码自行判断。

    3.4K40

    Linux:进程的创建、终止和等待

    例如,父进程等待客户端请求,生成子进程来处理请求。 2、一个进程要执行一个不同的程序。例如子进程从fork返回后,调用exec函数。 ...——>没有人规定代码程序必须得打印!比如说该错误并不是从显示器打印而是向网络写入 问题2:错误码适合计算机去看,但是不适合人去看,所以我们是否可以将他转换成字符串的错误信息解读??...,还可以发生在父进程在等待子进程结束从而获取他的状态。       ...也就是系统调用会卡住,会被链接到子进程的一个阻塞队列中等待。...3、int options 0:代表阻塞等待的方式,就是子进程没结束系统调用就一直等 WNOHANG: 代表非阻塞轮询的等待方式,若pid指定的子进程没有结束,则waitpid()函数返回0,不予以等待

    15210

    Intellij运行Java程序启动等待BUG分享

    按照网上大佬的排查流程,我走了一遍,发现在启动之前我做了一些事情,有一些配置的初始化程序,如下: /** * 创建日志文件夹和数据存储文件夹 */ static {...申请的事情就这么发生了,原来早就有不少人遇到这个问题,不过看起来他们比较严重,据资料显示有等待30s甚至60s之久的。 下面是某个提问者所做的排查工作: 我在系统上更改了JDK。...然后底下大佬们给出了答案,具体解释如下: IntelliJ支持反馈:问题是java.net.Inet4AddressImpl.getLocalHostName(Native Method)JDK方法调用中存在挂起的问题...java.net.InetAddress.getLocalHost()的结果 预期的实际行为: 预期的 - 返回的本地主机地址(以毫秒为单位) 实际的 - 延迟5秒后返回本地主机地址 由于Java程序获取本机地址的时候出现错误...,导致5s等待(这个应该是默认超时时间),然后再加上重试机制,所以报告的等待时间基本都是5s的整数倍。

    59730

    Linux】进程状态&&僵尸进程和孤儿进程&&阻塞、挂起和运行

    前言 上一篇博客中提到 【Linux】进程初步理解,这次继续来分享与进程有关的知识。 2. Linux的进程状态 Linux的进程状态就是struct task_struct内部的一个属性。...一个进程可以有几个状态(在Linux内核里,进程有时候也叫做任务)。...; 11 } 12 return 0; 13 } 运行代码:发现进程都是出于s状态: printf在显示器上打的时候,根据冯诺依曼特体系结构,显示器是一个外设,所以CPU在跑当前程序时...2.4 D状态 D状态是Linux系统比较特有的状态。...进程的阻塞、挂起和运行 在网上找的一张进程状态图: 终止状态就等价于Z状态和X状态。 4.1 运行 进程运行一般在CPU上运行。

    42610

    Linux】进程详解:进程的创建&终止&等待&替换

    前言 之前在这两篇文章中 【Linux】进程管理:状态与优先级调度的深度分析 【Linux】进程详解:命令行参数、环境变量及地址空间-CSDN博客 我们已经了解过了进程的基本概念,这一章我们要进一步的学习进程...localhost linux]# ....进程程序替换 5.1 替换原理 用fork创建子进程后执行的是和父进程相同的程序(但有可能执行不同的代码分支),子进程往往要调用一种exec函数以执行另一个程序。...函数参数 path:要替换的可执行程序所在的路径 arg:给可执行程序传递的命令行参数(是一个可变参数列表),最后要以NULL结尾。...p(path):表示执行程序可以自动在环境变量PATH中自动搜索可执行程序的路径, 没有 p 的需要指定路径 有p的会默认到 path 环境变量指定路径下寻找。

    22410

    LinuxLinux进程控制——进程创建、进程终止及进程等待详解

    ⭐进程创建 fork函数初识 在Linux中fork函数时非常重要的函数,它从已存在进程中创建一个新进程。新进程为子进程,而原进程为父进程。...但每个进程都将可以开始它们自己的旅程,看如下程序: int main( void ) { pid_t pid; printf("Before: pid is %d\n", getpid()...例如,父进程等待客户端请求,生成子进程来处理请求。 一个进程要执行一个不同的程序。例如子进程从fork返回后,调用exec函数。...linux]# ....⭐进程等待 进程等待的必要性 在Linux进程提到过,子进程退出,父进程如果不管不顾,不读取子进程的退出信息,就可能造成“僵尸进程”的问题,进而造成内存泄漏。

    11510

    Linux】深入 Linux 进程等待机制:阻塞与非阻塞的奥秘

    为什么需要进行进程等待 进程等待是多进程编程中至关重要的一部分,主要原因是为了让父进程正确管理子进程生命周期并避免各种问题。...进程等待的方法 2.1 wait方法 头文件 #include #include 语法格式 pid_t wait(int*status); 放回值:...参数: pid: pid=-1,等待任意一个子进程,与wait等效。 pid>0,等待其进程ID与pid相等的子进程。...(查看进程退出码) options: WNOHANG:如果pid指定的子进程没有结束,则waitpid()函数返回0,不予以等待,如果正常结束,则返回该子进程的ID。...701810 This is test for wait wait child 5s success,child return code is:1 提问:为什么会放回1呢 回答: 在上面的图中,我们得知了但程序正常退出后

    9010

    【多线程】乐观悲观锁、重量级轻量级锁、挂起等待自旋锁、公平非公锁、可重入不可重入锁、读写锁

    挂起等待锁:属于是悲观锁/重量级锁的一种典型实现 自旋锁:乐观锁/轻量级锁的一种典型实现 比如: 你去追你的女神: 女神女神,我好喜欢你,你尝试对女神加锁 女神表示:我有男朋友了 女神表示她这把锁已经被别的线程给加了...,立刻抓住机会,能够上位 - 不停地,循环地检测锁是否被释放,一旦锁释放,就能立即有机会能获得锁 你选择把女神拉黑,先不联系了,若干年后你从别人那里听说,女神分手了,你再去联络女神,这种行为就是“挂起等待锁...“自旋锁”方案 挂起等待锁也就适合“悲观锁”这样的场景了 锁竞争非常激烈,预测拿到锁的概率本身就不打,不放吧 CPU 让出来,充分的做其他事情 synchronized“自适应” 轻量级锁就是基于自旋的方式实现的...(JVM 内部,用户态代码实现) 重量级锁就是基于挂起等待的方式实现的(调用操作系统 API,在内核中实现) 纯用户态代码往往执行效率比内核态代码的高一些,总体来说,我们还是认为“自旋”的效率更高的,但是...CPU 开销更大 挂起等待锁的操作虽然 CPU 开销变少了,但整体的等待时间更多 公平锁和非公平锁 日常生活中,说的公平可能有不同的含义 图片 当女神分手了,该轮到谁上位呢?

    7610
    领券