注意:
#include <sys/types.h> #include <sys/wait.h> #include <unistd.h> #include <stdlib.h> #include <stdio.h> #include <errno.h> int main() { int status; pid_t pc, pr; pc = fork(); if ( pc < 0) /* 如果出错 */ { printf("error occured./n"); } else if ( pc == 0 ) /* 子进程 */ { printf("This is child process with pid of %d.\n", getpid()); sleep(2); exit(5); /* 子进程返回3 */ } else /* 父进程 */ { pr = wait(&status); //返回的是被结束子进程的pid if ( WIFEXITED(status) ) /* 如果WIFEXITED返回非零值 */ //WIFEXITED(status) 这个宏用来指出子进程是否为正常退出的,如果是,它会返回一个非零值。 //只是用来解析是否子正常退出时使用。 { printf("The child process %d exit normally.\n", pr); printf("the return code is %d.\n", WEXITSTATUS(status)); //这个WEXITSTATUS(status),使用来解析返回值的真实值到底是多少,即子进程的返回值是多少。默认没有返回值的时候 //为0 } else /* 如果WIFEXITED返回零 */ { printf("The child process %d exit abnormally.\n", pr); } } exit(0); }
1.wait函数的使用时如果需要知道退出时候的返回值,调用wait函数的时候要带参数。
2.wait函数的调用并不是强制结束一个进程而是等待一个子进程结束。
3.父进程在调用wait函数后就自己阻塞了,直到有一个子进程结束。
4.使用status返回参数的时候,解析进程是否正常结束使用的宏是WIFEXITED()
而解析函数返回值到底是多少时使用的宏为 WEXITSTATUS()使用的时候应该注意。