首页
学习
活动
专区
工具
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宏来判断子进程的退出状态,并进行相应的处理。

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

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

相关·内容

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非零,提取进程退出码。(查看进程退出码) 对于第三个参数,就可以让父进程等待的刚才中区做其他事情。

8510

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】详解进程终止&&进程等待

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

17710

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

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

7910

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.1K40

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

10.9K30

【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

4K00

wait() 回收进程

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

19830

Linux: 关于 SIGCHLD 的更多细节

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

2.7K60

【Linux】进程控制

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

18730

【Linux】Linux进程控制>进程创建&&进程终止&&进程等待&&进程程序替换

fork代码,内核做: 分配新的内存块和内核数据结构给进程 将父进程部分数据结构内容拷贝至进程 添加进程到系统进程列表当中 fork返回,开始调度器调度 当一个进程调用fork之后,就有两个二进制代码相同的进程...例如进程从fork返回,调用exec函数 1.4 fork调用失败的原因 、 系统中有太多的进程 实际用户的进程数超过了限制 2.进程终止 2.1 进程退出场景 代码运行完毕,结果正确...); 返回值: 当正常返回的时候waitpid返回收集到的进程进程ID; 如果设置了选项WNOHANG,而调用中waitpid发现没有已退出进程可收集,则返回0; 如果调用中出错,则返回-...Pid>0.等待其进程ID与pid相等的进程。 status: WIFEXITED(status): 若为正常终止进程返回的状态,则为真。...(查看进程是否是正常退出) WEXITSTATUS(status): 若WIFEXITED非零,提取进程退出码。

11310

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

wstatus用来返回进程结束时的状态,父进程通过wait得到wstatus就可以知道子进程的一些结束状态信息。...返回值是进程的ID,当前父进程有可能有多个子进程,wait函数阻塞直到其中一个进程结束wait就会返回,wait的返回值就可以用来判断到底是哪一个进程本次被回收了: wait(): on success...\n", ret); printf("进程是否正常退出:%d\n", WIFEXITED(wstatus)); printf("进程是否非正常退出:%d\n", WIFSIGNALED...、WIFSIGNALED、WEXITSTATUS这几个函数宏用来获取进程退出状态:WIFEXITED宏用来判断进程是否正常终止(return、exit、_exit退出);WIFSIGNALED宏用来判断进程是否非正常终止...\n", ret); printf("进程是否正常退出:%d\n", WIFEXITED(status)); printf("进程是否非正常退出:%d\n", WIFSIGNALED

3.3K20

Linux-进程控制

这里的status并不是指单纯的整数,与进程退出码 和 退出信号 有关,而其存储形式类似于位图的存储:   我们只看比特位的十六位:   中间有一个名为core dump的比特位我们信号部分在详谈...实际上,Linux给我们提供了两个常见的宏定义: WIFEXITED(status): 若为正常终止进程返回的状态,则为真。...(查看进程是否是正常退出) WEXITSTATUS(status): 若WIFEXITED非零,提取进程退出码。...,父进程等待进程退出,这期间父进程不做任何事情 当waitpid函数以非阻塞调用时,父进程以轮询的方式每段时间检测进程是否退出,没退出返回做父进程的事情 参数 0 WNOHANG   我们以下面这段代码来理解非阻塞...wait和waitpid: 区别 wait waitpid 参数 *status id, *status, options 状态 等待 任意 进程退出,并返回终止进程id 等待 指定 进程退出,并返回终止进程

8610

Linux之进程控制

fork,有两个执行流,父子进程是共享的,所以return会被父子进程各自调度一次,也就是调度两次。 为什么给父进程返回进程的pid,给进程返回0呢?...那么给父进程返回进程的pid,给进程返回0,可以很方便的区分父子进程。 同一个变量,为什么会有两个不同的值呢?...为了避免这种情况,为了让父进程知道子进程的任务完成的怎么样,我们需要让父进程通过进程等待的方式,回收进程退出的资源。...WIFEXITED(status):若进程为正常终止,返回的状态,则为真(查看进程是否正常退出) WEXITSTATUS(status):若WIFEXITED为非0,则用它提取进程退出码(查看进程退出码...3.替换原理 为什么调用替换函数,原程序的剩余部分不再执行?

17520

Linux wait() 和 waitpid()函数介绍

) 这个宏用来指出进程是否为正常退出的,如果是,它会返回一个非零值。...2, WEXITSTATUS(status) 当WIFEXITED返回非零值时,我们可以用这个宏来提取进程返回值,如果子进程调用exit(5)退出,WEXITSTATUS(status) 就会返回5...请注意,如果进程不是正常退出的,也就是说, WIFEXITED返回0,这个值就毫无意义。 详细的书中的表 下面的例子就是获取到进程的终止信号。然后进行输出。...发现没有已退出进程可收集,则返回0; 如果调用中出错,则返回-1,这时errno会被设置成相应的值以指示错误所在; 当pid所指示的进程不存在,或此进程存在,但不是调用进程进程,waitpid...从结果中,我们看到父进程一直等待进程的结束。

2.2K50

linux系统编程之进程(四):waitwaitpid函数与僵尸进程、fork 2 times

一、僵尸进程进程退出的时候,内核会向父进程发送SIGCHLD信号,进程退出是个异步事件(进程可以进程运行的任何时刻终止) 进程退出时,内核将进程置为僵尸状态,这个进程称为僵尸进程,...// 让进程退出自动回收,避免成为僵尸或者需要父进程 wait。...如果status不是一个空指针,状态信息将被写入它指向的位置 通过以下的宏定义可以获得进程退出状态 WIFEXITED(status) 如果子进程正常结束,返回一个非零值 WEXITSTATUS...(status) 如果WIFEXITED非零,返回进程退出码 WIFSIGNALED(status) 进程因为捕获信号而终止,返回非零值 WTERMSIG(status) 如果WIFSIGNALED...Son 创建  Grandson 立即返回,并由主进程 waitpid回收掉。而真正的目标 Grandson 则因为 "生父" Son 死掉而被 init 收养,然后直接被人道毁灭。

3.2K70

孤儿进程和僵尸进程的概念及进程回收(wait函数及waitpid函数)

一.孤儿进程 孤儿进程可以理解为一个进程的父进程英年早逝(父进程先于进程退出),就将这样的一个进程称为孤儿进程linux操作系统上。...但是这种做法大多数情况下都是不可取的,如父进程是一个服务器程序,如果为了回收其进程的资源,而杀死服务器程序,那么将导致整个服务器崩溃,得不偿失。...返回值:如果为-1,回收失败,已经没有进程可以回收了。 如果 > 0,返回值为进程对应的pid。 参数:进程退出状态,是一个传出参数。...判断进程是如何死的 (1)正常退出 (2)被信号杀死 (1)WIFEXITED(status):为非0,进程正常结束。...: (1)>0:返回清理掉的进程的PID。

1K20
领券