- 论坛徽章:
- 0
|
#include<sys/types.h>
#include<sys/wait.h>
#include<stdio.h>
#include<stdlib.h>
void h_exit(int status);
int main(void)
{
pid_t pid;
int status;
if((pid=fork())<0)
{
printf("fork error!\n");
exit(0);
}
else if(pid==0)
exit(7);
if(wait(&status)!=pid)
{
printf("wait error!\n");
exit(0);
}
h_exit(status);
if((pid=fork())<0)
{
printf("fork error!\n");
exit(0);
}
else if(pid==0)
exit(1);
if(wait(&status)!=pid)
{
printf("wait error!\n");
exit(0);
}
h_exit(status);
if((pid=fork())<0)
{
printf("fork error!\n");
exit(0);
}
else if(pid==0)
if(wait(&status)!=pid)
{
printf("wait error!\n");
exit(0);
}
h_exit(status);
exit(0);
}
void h_exit(int status)
{
if(WIFEXITED(status))
printf("normal termination,exit status=%d. \n", WEXITSTATUS(status));
else if(WIFSIGNALED(status))
printf("abnormal termination,exit status=%d. \n", WTERMSIG(status));
}
输出为何是:
normal termination,exit status=7.
normal termination,exit status=1.
wait error!
normal termination,exit status=1.
理论上应该是才对:
normal termination,exit status=7.
normal termination,exit status=1.
wait error!
normal termination,exit status=0.
子进程进入else if(pid==0) if(wait(&status)!=pid)后 退出时应该返回0才对,为何父进程最后获取1 |
|