#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
#include <sys/wait.h>
int main()
{
pid_t pid;
char *msg;
int k;
int exit_code;
printf("Study how to get exit code!\n");
pid = fork();
switch(pid)
{
case 0:
msg = "Child process is running!\n";
k = 5;
exit_code = 37;
break;
case -1:
perror("Process Creation Failed!\n");
exit(1);
default:
exit_code = 0;
break;
}
//父进程都会执行以下这段代码
//子进程的pid为0,父进程的pid为子进程的ID
if(pid != 0)
{
int stat_val;
pid_t child_pid;
child_pid = wait(&stat_val);
printf("Child process has exited,pid = %d\n",child_pid);
if(WIFEXITED(stat_val))
printf("Child exited with code %d\n",WEXITSTATUS(stat_val));
else
printf("Child exited abnormally!\n");
}
else
{
while(k-- > 0)
{
puts(msg);
sleep(2);
}
}
exit(exit_code);
}
执行结果:
[root@localhost code]# ./wait
Study how to get exit code!
Child process is running!
Child process is running!
Child process is running!
Child process is running!
Child process is running!
Child process has exited,pid = 2975
父进程遇到wait函数先会挂起,知道子进程执行完成后在执行!