验证兄弟进程之间能否相互回收
#include "../head.h"
int main(int argc, const char *argv[])
{
pid_t cpid1 = fork();//兄
if(cpid1>0)
{
pid_t cpid2 = fork();//弟
if(cpid2<0)
{
ERR_MSG("fork");
return -1;
}
if(0 == cpid2)
{
int ex_cpid = 0;
printf("%d\n",cpid1);
ex_cpid = waitpid(cpid1,NULL,0);
if(ex_cpid==cpid1)//出错,不能回收兄弟进程
printf("弟收兄成功\n");
else
printf("ex_cpid = %d,不能回收兄弟进程\n",ex_cpid);
}
else
{
printf("%d\n",cpid1);
while(1){
printf("父\n");
sleep(1);
}
}
}
else if(0 == cpid1)
{
printf("兄\n");
int i=0;
while(i<3)
{
printf("aaa\n");
i++;
}
printf("兄 is exited\n");
exit(1);
}
else
{
ERR_MSG("fork");
return -1;
}
return 0;
}
验证子进程能否回收父进程资源
#include "../head.h"
int main(int argc, const char *argv[])
{
// 子进程无法回收父进程资源
pid_t cpid = fork();
if(cpid>0)
{
int i = 0;
while(i<3)
{
sleep(1);
printf("parent pid = %d\n",getpid());
i++;
}
return 0;
}
else if(0 == cpid)
{
pid_t w_pid = waitpid(getppid(),NULL,0);
if(w_pid == getppid())
{
printf("子可以回收父的资源\n");
}
else
{
printf("子不可以回收父的资源 w_pid = %d\n",w_pid);
}
}
else
{
}
return 0;
}
综上所述,waitpid / wait函数,只能上级收下级,(父收子,不能子收父,兄弟间也不可以)