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

等待进程的那些事儿

,在 SIGCHLD 信号处理器中调用 wait 等待已结束的进程,回收进程信息,防止产生僵尸进程 (zombie)。...例如 bash,它除了在主线程中同步等待前台正在运行的进程,还必需在信号处理器中异步接收后台运行进程的状态反馈,这样就不得不混合使用 wait。...,第一个休眠 3 秒后退出,第二个休眠 4 秒后退出,由于父进程同步等待的是第二个进程,因此第二个进程模拟前台进程,第一个进程模拟后台进程。...因为 waitpid 是指定进程等待的,所以即使还有其它进程存在,这个也会返回错误,不会卡死在那里。...在处理器中也应使用 waitpid 等待进程,如返回 ECHILD 错误,证明该进程是前台进程,已经被同步 wait 掉了,不需要任何处理;否则作为后台进程处理。

2.4K30

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

前言:接着前面进程终止,话不多说我们进入Linux进程等待的学习,如果你还不了解进程终止建议先了解: Linux进程终止 本篇主要内容: 什么是进程等待 为什么要进行进程等待 如何进程等待...父进程创建进程的目的是为了让进程协助自己完成任务的,而父进程需要知道子进程将任务完成得如何。这就需要通过进程等待的方式,获取进程的退出信息。 3....进程等待的方法 3.1 wait方法 我们可以通过系统调用来等待进程:wait函数 wait等待任意一个进程的退出,如果等待成功他将返回进程的pid,失败则返回-1 我们就用一段代码来看看wait:...获取退出结果 当我们的程序异常了,exit code 将无任何意义 exit sig : 0则代表没有收到信号 手动杀掉进程也会获取到信号 但是如果我们每次提取退出信息都要使用繁琐的位运算,这很不方便...这个就是因为进程具有独立性,父进程无法直接获得进程的退出信息 总结: 进程等待确实非常有用,它既可以回收僵尸进程,避免造成内存泄漏,也能让父进程能够获取到进程的退出信息,进程等待我们就先了解这么多

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

    C语言Linux系统编程-等待终止的进程(僵死进程

    1.等待终止的进程(僵死进程): 如果一个进程在父进程之前结束,内核会把子进程设置为一个特殊的状态,处于这种状态的进程称为僵死进程 当父进程获取了进程的信息后,进程才会消失。...pid_t wait(int *status); 父进程调用这个方法会被阻塞住,如果子进程终止的时候,此方法会调用并且返回终止进程的pid #include #include <unistd.h...sleep(2); pid=getpid(); ppid=getppid(); printf("我是进程...,pid=22315 , ppid=12479 ,我新建的进程pid=22316 我是进程,pid=22316 , ppid=22315 我的进程,pid=22316,终止了 2.如果父进程进程之前终止了...,那么系统会把子进程设置给init进程(pid为1),init进程会周期性的等待所有的进程,确保没有长时间的僵死进程

    3.5K20

    初识Linux · 进程等待

    来查看,并且知道了如果终止进程。 那么本文,我们来学习进程等待,我们从三个方面来看,进程等待是什么?为什么要等待等待是在做什么?从以上几个方面,相信同学对于Linux中的进程等待有更深层次的理解。...进程等待是什么 思考:什么情况下会发生等待的情况? 情况实例:父进程创建了进程,父进程任务结束,进程还没有结束,父进程需要等待进程退出。这种情况就是等待。 那么不等待会引发的后果是什么呢?...所以我们得出结论: 进程等待是父进程进程先结束自己的任务,所以父进程为了 整个系统的稳定性,需要等待进程。...为什么需要进程等待 进程等待除了考虑内存泄漏引发的安全问题,父进程还需要考虑获取进程的退出信息,这是一个可选的选项,因为不是所有的进程都需要父进程获取退出信息。...进程等待都在做什么 前面两点,即便是没有学习过进程等待的都应该知道有那么回事,今天的重点实际上是在等待进程的时候父进程是在做什么。

    8410

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

    进程运行完成,结果对还是不对,或者是否正常退出。...4、父进程通过进程等待(wait)的方式,回收进程资源,获取进程退出信息  3.2、进程等待的方法 3.2.1、wait方法 wait方法里的参数为输出型参数,可以设置为NULL。...调用wait函数父进程默认进行阻塞等待,会等待任意一个进程退出。等待成功,wait会返回进程的pid,等待失败返回小于0的值。 ...采用非阻塞的方法等待进程退出成功返回进程的pid,进程还在继续自己的工作返回0,进程出错返回小于0的数。...阻塞等待时父进程会阻塞在waitpid这里一直等待进程返回,非阻塞等待采用轮询的方法查看进程的退出信息,在轮询的间隙父进程可以继续做别的工作。

    26910

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

    1.进程创建 1.1 fork函数 在linux中fork函数时非常重要的函数,它从已存在进程中创建一个新进程。...例如进程从fork返回后,调用exec函数 1.4 fork调用失败的原因 、 系统中有太多的进程 实际用户的进程数超过了限制 2.进程终止 2.1 进程退出场景 代码运行完毕,结果正确...如,进程运行完成,结果对还是不对,或者是否正常退出 父进程通过进程等待的方式,回收进程资源,获取进程退出信息 3.2 进程等待的方法 3.2.1 wait方法 #include0.等待进程ID与pid相等的进程。 status: WIFEXITED(status): 若为正常终止进程返回的状态,则为真。...所以要写一个shell,需要循环以下过程: 获取命令行 解析命令行 建立一个进程(fork) 替换进程(execvp) 父进程等待进程退出(wait) 根据这些思路,和我们前面的学的技术,就可以自己来实现一个

    15110

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

    进程创建 fork函数初识 在Linux中fork函数时非常重要的函数,它从已存在进程中创建一个新进程。新进程进程,而原进程为父进程。...fork调用失败的原因 系统中有太多的进程 实际用户的进程数超过了限制 ⭐进程终止 进程退出场景 代码运行完毕,结果正确 代码运行完毕,结果不正确 代码异常终止 代码运行完毕,结果正不正确看退出码;..."); exit(0); } 运行结果: [root@localhost linux]# ....⭐进程等待 进程等待的必要性 在Linux进程提到过,进程退出,父进程如果不管不顾,不读取进程的退出信息,就可能造成“僵尸进程”的问题,进而造成内存泄漏。...如,进程运行完成,结果对还是不对, 或者是否正常退出。 父进程通过进程等待的方式,回收进程资源,获取进程退出信息。

    11410

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

    /a.out hello[root@localhost linux]# int main() { printf("hello"); _exit(0); } 运行结果(直接退出): [root@...进程等待 4.1 进程等待的必要性 「进程等待」的工作就是让父进程回收进程的资源,获取进程的退出信息。...所以一定需要通过父进程通过进程等待的方式,来回收进程的资源,同时为了搞清楚进程完成任务的情况,也需要通过通过进程等待的方式获取进程的退出信息。...如果父进程就在那里等待进程完成任务,接收进程的退出信息的话,这种方式就是阻塞等待。就好像父进程被阻塞住不能前进一样。...\n"); return 1; } } return 0; } 运行结果: [root@localhost linux] # . / a.out child is run, pid is

    21310

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

    ,退出 } 观察结果不难发现,两个子进程已经成功创建,但最晚创建的进程,总是最先运行,这是因为 fork 创建进程后,先执行哪个进程取决于调度器 得到进程后,此时可以在一个程序中同时执行两个进程...查看最近一次进程运行的 退出码 退出码是给父进程看的,可以判断进程是否成功运行 进程运行情况: 运行失败或异常终止,此时出现终止信号,无退出码 运行成功,返回退出码,可能出现结果错误的情况...内核数据结构+代码和数据,出现 僵尸进程 为了避免这种情况的出现,父进程可以通过函数等待进程运行结束,此时父进程属于阻塞状态 注意: 进程的退出状态是必要的 进程的执行结果是非必要的 也就是说,父进程必须对子进程负责...,确保进程不会连累 OS,而进程执行的结果是否正确,需要我们自行判断 3.2、等待函数 系统提供的父进程等待函数有两个 wait() 和 waitpid(),后者比较常用 #include <sys...---- 总结 以上就是关于 Linux进程控制(创建、终止、等待) 的相关知识了,我们学习了 进程 是如何被创建的,创建后又是如何终止的,以及 进程 终止 父进程 需要做些什么,有了这些知识后,

    30710

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

    环境:centos7.6,腾讯云服务器 Linux文章都放在了专栏:【Linux】欢迎支持订阅 相关文章推荐: 【Linux】冯.诺依曼体系结构与操作系统 【Linux进程理解与学习Ⅰ-进程概念...【Linux进程理解与学习Ⅱ-进程状态 【Linux进程理解与学习Ⅲ-环境变量 【Linux进程理解与学习Ⅳ-进程地址空间 浅谈Linux下的shell--BASH 【Linux进程优先级...僵尸进程(Z) 对于父进程来说,进程的执行结果是否正确并不重要,重要的是进程的退出状态,即进程是否是正常退出。而进程的执行结果是否正确则是由程序员根据退出码自行判断。...总而言之,进程等待的目的只有两个,如下: 解决僵尸进程问题,避免内存泄漏(必须要做的) 获取进程的退出结果(如果需要的话) 进程等待的方法 那么父进程应如何等待呢?...我们可以通过等待轮询的方式,来保证在等待进程的同时,父进程得以做一些其他的事。

    3.4K40

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

    进程退出场景: 1/代码运行完毕,结果正确 2/代码运行完毕,结果不正确 3/代码异常终止 2.1 运行完毕结果不正确 正常终止(可以通过 echo ?...; 参数: pid: Pid=-1,等待任一个进程。...——>(1)进程的代码是否异常??(2)没有异常,结果对吗,不对的原因是什么?  问题2:父进程为什么不定义全局变量的status,而必须用wait等系统调用来获取状态呢??...,还可以发生在父进程等待进程结束从而获取他的状态。       ...3、int options 0:代表阻塞等待的方式,就是进程没结束系统调用就一直等 WNOHANG: 代表非阻塞轮询的等待方式,若pid指定的进程没有结束,则waitpid()函数返回0,不予以等待

    15010

    Linux进程地址空间、进程控制(一.进程创建、进程终止、进程等待

    更新进程列表:操作系统会从进程列表中移除已终止的进程。 5.进程等待 5.1必要性 在Unix/Linux系统中,当进程退出时,它的进程描述符仍然保留在系统中,直到父进程通过某种方式获取其退出状态。...如,进程运行完成,结果对还是不对, 或者是否正常退出 为了回收进程的资源并获取其退出信息,父进程需要调用wait()或waitpid()系统调用(进行进程等待)。...这些调用会阻塞父进程,直到有进程退出,并返回已退出进程的PID和退出状态 5.2进程等待的方法 5.2.1 wait()方法 wait 方法在Linux 编程中是一个重要的系统调用,它主要用于监视先前启动的进程...,并根据被等待进程的运行结果返回相应的 Exit 状态。...10秒后父进程开始回收 10~15秒:父进程正常运行,15秒后父进程结束 5.2.2waitpid()方法 waitpid 是 Unix 和 Linux 系统编程中用于等待进程结束并获取其状态的系统调用

    12500

    Linux进程控制:理解什么是进程创建,进程终止,进程等待 | 进程替换

    : 代码运行完毕,结果正确 代码运行完毕,结果不正确 代码异常终止:异常退出本质是收到了对应的信号 进程退出的常用方法 return exit _exit 那么谁会关心一个进程的运行情况呢?...我们知道子进程在退出时会变成僵尸进程: 僵尸进程无法被杀死,需要通过进程等待来杀掉它,进而解决内存泄漏问题---必须解决的 我们要通过进程等待,获得进程的退出情况---知道我布置给进程的任务,它完成的怎么样了...pid>0,等待进程ID与pid相等的进程。 status:  WIFEXITED(status): 若为正常终止进程返回的状态,则为真。...int exit_code; int exit_signal; 阻塞等待 waitpid的第三个参数 options 为0时,表示当进程一直没有退出的时候,父进程处于阻塞等待。 什么是阻塞等待?...即父进程会检查一次看进程有没有退出,没有则返回0,此时父进程可以做一些自己的事,而不是一味的等待进程的退出,在进程退出前循环以上的过程,直到进程退出,返回 >0 的一个数,返回负数则表示等待失败

    31310

    LinuxLinux进程控制 --- 进程创建、终止、等待、替换、shell派生子进程的理解…

    三、进程等待(回收进程所有资源,读取进程退出信息) 1.wait(等待任意的进程,只能是阻塞等待) 1....通过运行结果可以看出,在前10秒钟,两个进程都是休眠S状态,因为在等待显示器就绪,在接下来的5秒钟,进程变为了僵尸进程,状态由S变为Z,然后在wait调用结束之后,进程被父进程成功回收,只剩下继续休眠...3.waitpid(可以等待特定的进程,可以非阻塞等待) 1. waitpid可以获取进程退出结果,并且回收僵尸进程剩余资源。 2....,获取进程的退出结果 24 // 2.在父进程等待期间,进程还没退出的时候,父进程的状态就是阻塞等待 25 int ret=waitpid(id,&status,0); 26...下面是进程异常终止的结果。 5.进程的阻塞和非阻塞等待(多次非阻塞等待 ⇒ 轮询) 1.

    14.8K30

    Linux系统进程编程之回收进程(三)

    那么说了这么多,我们该怎么样来回收Linux系统的僵尸进程呢?...---pid > 0 等待进程I D与p i d相等的进程。 ---pid == 0 等待其组I D等于调用进程的组I D的任一进程。换句话说是与调用 者进程同在一个组的进程。...的进程而是回收任意一个进程,0表示用默认的方式(阻塞式)来进行等待,返回值ret是本次回收的进程的PID */ /* 等待回收PID为pid的这个子进程,如果当前进程并没有一个ID号为...此时如果父进程执行waitpid时进程已经先结束等待回收则waitpid直接回收成功,返回值是回收的进程的PID; 如果父进程waitpid时进程尚未结束则父进程立刻返回(非阻塞),但是返回值为...---waitpid并不等待第一个终止的进程—它有若干个选择项,可以控----制它所等待的特定进程。 ---实际上wait函数是waitpid函数的一个特例。

    3.4K20

    Linux进程概念(二.查看进程、父进程进程进程状态详解)

    ps 是一个常用的 Unix/Linux 命令,用于显示当前系统中运行的进程信息。...在 Linux 中,每个进程都属于一个或多个组,getgid() 函数返回调用进程的有效组 ID。...在Unix/Linux系统中,可以使用 getpid() 系统调用来获取当前进程的PID,使用 getppid() 系统调用来获取当前进程的父进程的PID。...阻塞 当进程需要等待某种事件发生时,例如等待 I/O 操作完成或等待某个信号,它会进入阻塞状态。在阻塞状态下,进程暂时停止执行,让出 CPU 给其他可以执行的进程。...3.3Linux中状态初步认识 一个进程可以有几个状态(在Linux内核里,进程有时候也叫做任务)进程的状态通常由几个不同的状态标识符表示。

    1.4K10
    领券