linux进程中的wait()和waitpid()

前言:wait() 和 waitpid() 函数在C语言中有释放子进程遗留资源的作用。当一个子进程结束时调用exit()或_exit(),会进入僵死状态,它的资源(如内存、打开的文件描述符等)并不会立即被系统回收。这些资源会保留,直到父进程调用 wait() 或 waitpid() 来收集子进程的状态信息。在父进程中调用wait()和waitpid(),会等待子进程结束,期间父进程会进入阻塞状态,直到接收到子进程结束的信号,才会继续执行。如果有多个子进程,那使用一个wait(NULL),父进程只会等待其中的一个。可以多次调用来等待所有的子进程都就结束。

一、wait()

函数头文件           #include <sys/types.h>
                                #include <sys/wait.h>
函数原型  :      pid_t wait(int *wstatus);
函数功能 :       让函数调用者进程进入到睡眠状态,等待子进程进入僵死状态后,释放相关资源并返回
函数参数:        wstatus:保存子进程退出状态值变量的指针(*****获取具体值需要使用宏定义*****)
函数返回值        wait(): 如果成功,返回终止子进程的进程ID;如果出错,则返回-1

实际上是有4种返回值,还有返回0和返回<-1,但这些都代表特定的情况,并不常见。

对于传入的参数wstatus,一些宏可以对参数进行操作:

  • WEXITSTATUS(status): 如果子进程是正常退出的,这个宏可以用来获取子进程的退出状态码。
  • WTERMSIG(status): 如果子进程是因为信号而终止的,这个宏可以用来获取导致子进程终止的信号。
  • WSTOPSIG(status): 如果子进程是被停止的,这个宏可以用来获取导致子进程停止的信号。
  • WIFEXITED(status): 检查子进程是否正常退出。如果返回非零值,表示子进程是正常退出的。
  • WIFSI
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值