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

为什么WIFEXITED在子进程退出后返回false?

WIFEXITED是一个宏,用于在父进程中判断子进程是否正常退出。当子进程通过调用exit()或者_exit()函数正常退出时,WIFEXITED会返回true,表示子进程已经退出。但是当WIFEXITED返回false时,表示子进程没有正常退出。

有以下几种可能导致WIFEXITED返回false的情况:

  1. 子进程被信号中断:当子进程被一个信号中断并终止时,WIFEXITED返回false。这种情况下,可以使用WTERMSIG宏来获取导致子进程终止的信号编号。
  2. 子进程通过非正常方式退出:当子进程通过调用abort()函数或者收到一个非捕获的信号而异常终止时,WIFEXITED返回false。
  3. 子进程被其他进程终止:当子进程被其他进程通过调用kill()函数终止时,WIFEXITED返回false。

总之,WIFEXITED返回false表示子进程没有正常退出,可能是被信号中断、异常终止或者被其他进程终止。在处理子进程退出状态时,可以使用WIFEXITED和WEXITSTATUS宏来判断子进程的退出状态,并进行相应的处理。

腾讯云相关产品和产品介绍链接地址:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

【Linux】进程控制

#include pid_t fork(void); //返回值:进程返回0,父进程返回进程id,出错返回-1 进程调用fork,当控制转移到内核中的fork代码,内核做:...但每个进程都将可以 开始它们自己的旅程。 fork 函数返回进程返回0, 父进程返回的是进程的pid。 为什么进程返回的是进程的pid?...进程运行五秒后退出,此时由于父进程还在休眠无法回收,所以进程就变成Z状态,再过五秒进程就被父进程回收了。...Pid>0.等待其进程ID与pid相等的进程。 status: WIFEXITED(status): 若为正常终止进程返回的状态,则为真。...实际上我们不使用位操作符处理status,而是使用两个宏,WIFEXITED和WEXITSTATUS。 WIFEXITED(status): 若为正常终止进程返回的状态,则为真。

11010

L010Linux和androidNDK之linux避免僵尸进程进程退出的处理

L010Linux和androidNDK之linux避免僵尸进程进程退出的处理 如果你程序中fork出一个进程,没有好好处理进程退出的相关事宜,那么就有可能召唤出传说中进程界的僵尸---僵尸进程...,并不能将其完全销毁) 僵尸进程是怎么样产生 Linux进程的状态中,僵尸进程是非常特殊的一种,它已经放弃了几乎所有内存空间,没有任何可执行代码,也不能被调度,仅仅在进程列表中保留一个位置,记载该进程退出状态等信息供其他进程收集...(1)当进程结束之后,但父进程未结束之前,进程将成为僵尸进程,父进程结束僵尸被init进程回收。...*Note Signal Handling:: 进程的结束状态返回存于status,如下有几个宏可判别结束情况 WIFEXITED(status)如果子进程正常结束则为非0值。...WEXITSTATUS(status)取得进程exit()返回的结束代码,一般会先用WIFEXITED 来判断是否正常结束才能使用此宏。

3.1K40
  • 【Linux】开始掌握进程控制吧!

    2.2 fork函数返回进程返回0 父进程返回的是进程的pid 那为什么进程返回进程PID ,给进程返回0呢???...例如进程从fork返回,调用exec函数。 一般使用if else 分开书写,也可以通过系统调用打开新的进程。...父进程通过进程等待的方式,回收进程资源,获取进程退出信息 也就是说,任何进程退出时都要被父进程进行等待,不然进程处于僵尸进程就会造成内存泄漏!!!...(查看进程是否是正常退出) WEXITSTATUS(status): 若WIFEXITED非零,提取进程退出码。...(查看进程是否是正常退出) WEXITSTATUS(status): 若WIFEXITED非零,提取进程退出码。(查看进程退出码) 对于第三个参数,就可以让父进程等待的刚才中区做其他事情。

    10110

    Linux系统-进程控制

    > fork成功对子进程返回0,对父进程返回进程id,fork出错返回-1 内核视角看待fork: 进程调用fork,内核分配新的内存块和内核数据结构给进程 将父进程部分数据结构内容拷贝至进程...: 只有是main函数的的return才算是终止进程,其他函数return只是结束函数,因为系统调用的是main函数,main函数返回才是进程返回 调用main函数运行结束,main函数的...,以此获取进程退出的信息 使用对应的宏可以查看我们需要的退出信息:WIFEXITED(status): 若为正常终止进程返回的状态,则为真(查看进程是否是正常退出);WEXITSTATUS(status...): 若WIFEXITED非零,提取进程退出码(查看进程退出码) 参数options: 设置为0:表示默认的阻塞式等待进程退出,即进程退出就不返回,一直等待到进程退出回收进程...如果传递变量地址,操作系统会根据该参数将进程退出信息反馈给父进程 使用对应的宏可以方便查看我们需要的退出信息:WIFEXITED(status): 若为正常终止进程返回的状态,则为真(查看进程是否是正常退出

    1.5K30

    【Linux进程控制】五、wait()函数——进程回收

    ID3秒变成了1,这说明父进程结束,它变成了孤儿进程,并被init进程收养,使用kill命令基于可以杀死孤儿进程。...WIFEXITED(status)判断进程是否正常退出WIFEXITED(status)为真表示正常退出,使用WEXITSTATUS(status)获取退出状态; WIFEXITED(status...,立即返回,不会挂起等待(wait函数如果子进程没有退出会阻塞等待)。...如果设置了WNOHANG选项,并且没有进程退出返回0,如果有进程退出返回退出进程的pid。 On error, -1 is returned....当waitpid()返回进程进程才结束,但是waitpid()已经执行完了,所以并没有回收进程进程因此变成僵尸进程

    8310

    wait和waitpid

    ,可以通过以下宏来检查进程退出原因: WIFEXITED(status): 进程是否正常退出。...wait() 没有进程返回 -1 并设置 errno 为 ECHILD。...它们主要用于进程管理和控制,是系统编程中非常重要的工具  1:是什么 2:为什么也就是必要性 之前说过,进程退出,父进程如果不管不顾,就可能造成‘僵尸进程’的问题,进而造成内存泄漏。...父进程通过进程等待的方式,回收进程资源,获取进程退出信息 wait回收僵尸进程(父进程等待是必须的)(wait成功返回的是回收进程的PI,失败返回-1) 运行进程的状态是S+,然后5秒就会变成...for循环,经过fork创建了一个进程进入了RunChild,然后执行完RunChild,exit(0),就退出进程了,然后父进程再次进入循环,再次创建一个进。。。。。。

    8110

    【Linux】Linux进程控制——进程创建、进程终止及进程等待详解

    #include pid_t fork(void); 返回值:自进程返回0,父进程返回进程id,出错返回-1 进程调用fork,当控制转移到内核中的fork代码,内核做: 分配新的内存块和内核数据结构给进程...例如进程从fork返回,调用exec函数。...⭐进程等待 进程等待的必要性 Linux进程提到过,进程退出,父进程如果不管不顾,不读取进程退出信息,就可能造成“僵尸进程”的问题,进而造成内存泄漏。...Pid>0.等待其进程ID与pid相等的进程。 status: WIFEXITED(status): 若为正常终止进程返回的状态,则为真。...(查看进程是否是正常退出) WEXITSTATUS(status): 若WIFEXITED非零,提取进程退出码。

    11610

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

    进程等待必要性 了解完进程等待的概念,新的问题出现了,我们为什么要进行进程等待,进程等待的必要性是什么?...进程等待的方法 3.1 wait方法 我们可以通过系统调用来等待进程:wait函数 wait等待任意一个进程退出,如果等待成功他将返回进程的pid,失败则返回-1 我们就用一段代码来看看wait:...通过这个视频我们又能发现两个进程一起运行,但是进程没有退出之前,父进程一直wait上等待,并且并没有出现进程僵尸状态而是直接回收了。...,因此系统给我们做了一个简单的封装 status: WIFEXITED(status): 若为正常终止进程返回的状态,则为真。...(查看进程是否是正常退出) WEXITSTATUS(status): 若WIFEXITED非零,提取进程退出码。

    10810

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

    我们的代码进程中,在任意地方调用exit都表示进程退出。...采用非阻塞的方法等待,进程退出成功返回进程的pid,进程还在继续自己的工作返回0,进程出错返回小于0的数。...阻塞等待时父进程会阻塞在waitpid这里一直等待进程返回,非阻塞等待采用轮询的方法查看进程退出信息,轮询的间隙父进程可以继续做别的工作。...因为进程退出码为1,status的第24个比特位被设置为1,没有收到退出信号,所以status8个比特位都为0,所以status等于2的8次方等于256。 ...WIFEXITED(status): 若为正常终止进程返回的状态,则为真。(查看进程是否是正常退出)。 WEXITSTATUS(status): 若WIFEXITED非零,提取进程退出码。

    27010

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

    fork()为什么会出现两个返回值❓ 根据fork()函数在内核中的操作就包含了进程的数据结构的创建,所以fork()返回之前,进程就已经被创建出来了。...()函数外面看到的现象就是一个函数出现了两个返回值 .为什么进程返回0,而父进程返回进程的PID❓ 一个父进程可以创建很多的进程,而每一个进程都只能有一个父进程 而父进程创建进程是为了让进程完成任务的...status的16个比特位上,高8位表示进程退出的状态,即进程退出码。而后7位为进程终止的信号。第8个比特位是一个标志 注意:当进程正常退出的时候,不用查看退出信号。...等待其进程ID与pid相等的进程。 status: WIFEXITED(status): 若为正常终止进程返回的状态,则为真。...(查看进程是否是正常退出) WEXITSTATUS(status): 若WIFEXITED非零,提取进程退出码。

    22710

    Linux中system函数返回值详解

    如果子进程无法创建,或者其状态不能被检索,则返回值为-1; 如果在进程中不能执行一个shell,或shell未正常的结束,返回值被写入到status的低8~15比特位中;一般为127值 如果所有系统调用都成功...(status) 用来指出进程是否为正常退出的,如果是,它会返回一个非零值 WEXITSTATUS(status) 用来获取返回值status的低8~15数据 有了这两个宏代码就简介很多,...总结一下,system的返回值需要通过以下三个步骤确定 首先判断进程是否成功, status !...= -1; 判断进程是否正常退出, WIFEXITED(status)是否非零; 进程返回值, WEXITSTATUS(status) == 0 ; #include #include...命令是否正确执行 Linux system函数返回值 父进程等待进程终止 wait, WIFEXITED, WEXITSTATUS

    11.4K30

    Linux下wait, WIFEXITED, WEXITSTATUS的比较

    wait,就立即阻塞自己,由wait自动分析是否当前进程的某个子进程已经退出,如果让它找到了这样一个已经变成僵尸的进程,wait就会收集这个子进程的信息,并把它彻底销毁返回;如果没有找到这样一个进程...); 如果成功,wait会返回被收集的进程进程ID,如果调用进程没有进程,调用就会失败,此时wait返回-1,同时errno被置为ECHILD。...) 这个宏用来指出进程是否为正常退出的,如果是,它会返回一个非零值。...2,WEXITSTATUS(status) 当WIFEXITED返回非零值时,我们可以用这个宏来提取进程返回值,如果子进程调用exit(5)退出,WEXITSTATUS(status)就会返回5;如果子进程调用...请注意,如果进程不是正常退出的,也就是说,WIFEXITED返回0,这个值就毫无意义。 当然,处理进程退出状态的宏并不止这两个,但它们当中的绝大部分在平时的编程中很少用到。

    1.3K40

    【Linux】进程控制

    另外,为什么 fork 给父进程返回进程的 pid,而给进程返回0呢?...一个进程要创建进程来执行一个不同的程序;例如进程从 fork 返回,调用 exec 系列函数;这是我们下面要重点学习的内容。...宏 来帮助我们获取 status 中的退出状态和退出信号,而不用我们自己去按位操作: WIFEXITED (status):若进程正常退出返回真,否则返回假;(查看进程是否是正常退出)(wait...if exited) WEXITSTATUS (status):若 WIFEXITED 为真,提取进程退出状态;(查看进程退出码)(wait exit status) if(WIFEXITED(... Linux 中,我们可以使用 chdir 系统调用来改变进程的工作目录: 在理解了当前路径是当前进程的工作目录之后,我们就可以解释为什么我们的 shell 执行 cd 命令目录不改变了: myshell

    4.1K00

    【Linux】进程控制

    fork返回返回两次,对于父子进程返回的值不相同,如果需要,我们可以通过if,else来分流,让父子进程拥有相同代码的基础上实现不同的任务。进程fork返回0,父进程返回值是进程的PID。...所以这样的进程拥有独立性的特点。 也是一个进程崩溃不影响另一个的原因。 所以为什么进程返回的是进程的PID,进程返回时0?...3、进程等待 3、1、进程等待的必要性 任何进程退出的情况下,一般都必须要被父进程等待。如果在退出的时候父进程不管不顾,进程就会一直保持状态Z,可能还会造成内存泄漏的问题。...Pid>0,等待其进程ID与pid相等的进程。 status: WIFEXITED(status):若正常终止进程返回状态,则为真。...(用来查看进程是否正常退出) WEXITSTATUS(status):若WIFEXITED非零则提取进程退出码。

    6610

    wait() 回收进程

    在前面的文章中我们讨论了如何通过 fork() 函数创建进程,创建进程如果优先于父进程退出进程的虚拟内存空间就消失了,但是进程控制块PCB并没有消失,这里面包含了这个子进程退出状态,需要由父进程来进行回收...进程回收之前,这个进程被称为僵尸进程(僵死进程),任何一个进程都会经过这段僵尸进程的阶段,最后由父进程来回收。...,如果返回真则证明子进程是正常退出的 if (WIFEXITED(status)) { // 打印已经退出进程的 pid...printf("I'm parent, The child process %d exit normally\n", wpid); // 打印子进程程序退出返回值...是用来判断进程退出状态的,如果返回真则证明子进程是正常退出的,随后使用了WEXITSTATUS获取了退出代码。

    22330

    【Linux】进程控制

    用户级的缓冲区(doge)对于缓冲区在哪的问题后面涉及到细谈 ---- 四、进程等待 我们知道,进程有一种Z(僵尸)状态,Z状态是一个问题:进程退出,父进程如果不管不顾,就可能造成‘僵尸进程’的问题...进程为什么要等待 1.父进程通过进程等待的方式,回收进程资源 2.获取进程退出信息 进程等待的方法 wait 返回值:成功返回被等待进程pid,失败返回-1。...但是,对于获得进程退出结果,我们可以不采用位操作进行,Linux提供了对应操作的宏 WIFEXITED(status): 若为正常终止进程返回的状态,则为真。...(查看进程是否是正常退出) WEXITSTATUS(status): 若WIFEXITED非零,提取进程退出码。...替换原理 用fork创建进程执行的是和父进程相同的程序(但有可能执行不同的代码分支),进程往往要调用一种exec函数 以执行另一个程序。

    19730

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

    : 当正常放回的时候waitpid返回搜集到的进程进程ID 如果设置了选项WNOHANG,而调用中waitpid发现没有已退出进程可收集,则返回0。...pid>0,等待其进程ID与pid相等的进程。 status: WIFEXITED(status):如果正常终止进程返回的状态,则为真。...(查看进程退出码) options: WNOHANG:如果pid指定的进程没有结束,则waitpid()函数返回0,不予以等待,如果正常结束,则返回进程的ID。...如果子进程已经退出,调用wait/waitpid会立即返回,并且释放资源,获取进程退出信息。 如果任意时刻调用wait/waitpid,进程存在且正常运行,则可能阻塞。...1呢 回答: 在上面的图中,我们得知了但程序正常退出,其退出状态存储低8位中,而257的二进制位为0001 0000 0001,会被截断为1 2.5 进程的非堵塞等待方法 #include <stdio.h

    9010

    Linux: 关于 SIGCHLD 的更多细节

    这种进程称之为僵尸进程 成为僵尸进程的因素 进程 先于 父进程退出进程的状态信息,没有被父进程回收; 那么问题来了,进程退出了,父进程怎么知道呢?...不用担心 init会挂着一堆僵尸, init本身的设计就有专门回收的处理,所以有多少回收多少; SIGCHLD 还能干嘛 刚才我们处理到父子进程相关的问题时,多多少少接触到SIGCHLD, 那么,只有回收进程的时候才需要用到么...当进程被暂停时,则立即返回进程的 pid; WCONTINUED: 当被暂停的进程,又被信号恢复时,则立即返回进程的pid; 而下面这些宏,将搭配status一起使用: WIFEXITED...信号值: 15 # kill -SIGTERM 10848 如果自己进程上面加个退出,就会打印:正常退出了 结语 在上面的实验中,我们已经发现通过SIGCHLD除了用来回收进程...操作系统上,也有很多利用这个工作的,例如:后台进程,如果向标准输入读取内容时,是会被暂停的 ? ? 为什么呢?

    2.8K60
    领券