1 #include <unistd.h>
2 #include <sys/types.h>
3 #include <sys/wait.h>
4 #include <stdio.h>
5 #include <errno.h>
6 #include <math.h>
7 #include <stdlib.h>
8 int main(void)
9 {
10 pid_t child;
11 int status;
12 printf("This will demostrate(演示) how to get child status./n");
13 if((child=fork())==-1)/*当fork调用失败时候(内存不足或者用户的最大进程数已到,fork返回-1)*/
14 {
15 printf("Fork Error: %s/n",strerror(errno));
16 exit(1);
17 }
18 else if(child==0)
19 {
20 int i;
21 printf("I am the child:%ld/n",getpid());
22 for(i=0;i<1000000;i++) sin(i);
23 i=5;
24 printf("I exit with %d/n",i);
25 exit(i);
26 }
27 while(((child=wait(&status))==-1)&(errno==EINTR));/*wait调用会使父进程阻塞直到一个子进程结束或者是父进程接受到了一个信号,如果没有父进程没有子进程或者他的> 子进程已经结束了wait会立即返回。成功时候,wait将返回进程ID,否则返回-1,并设置全局变量errno.stat_loc是子进程的退出状态.子进程调用exit,_exit或者return 来设置这个
值。为了得到这个值,Linux定义了宏来测试这个返回值.WIFEXITED: 会使父进程阻塞直到一个子进程结束或者是父进程接受到了一个信号,如果没有父进程没有子进程或者他的子进> 程已经结束了wait会立即返回。成功时候,wait将返回进程ID,否则返回-1,并设置全局变量errno.stat_loc是子进程的退出状态.子进程调用exit,_exit或者return 来设置这个值,> 为了得到这个值,Linux定义几个宏来测试这个返回值。WIFEXITED:判断子进程退出值是否0,WEXITSTATUS:判断子进程的退出值(子进程退出非0);WIFSIGNALED:子进程由于没有获> 得信号而退出*/
28 if(child==-1)
29 printf("Wait Error: %s/n",strerror(errno));
30 else if(!status)
31 printf("Child %ld terminated normally return status is zero /n",child);
32 else if(WIFEXITED(status))
33 printf("Child %ld terminated normally return status is %d/n",child,WEXITSTATUS(status));
34 else if(WIFSIGNALED(status))
35 printf("Child %ld terminated due to signal %d znot caught/n",child,WTERMSIG(status));
36 return 0;
37 }
2 #include <sys/types.h>
3 #include <sys/wait.h>
4 #include <stdio.h>
5 #include <errno.h>
6 #include <math.h>
7 #include <stdlib.h>
8 int main(void)
9 {
10 pid_t child;
11 int status;
12 printf("This will demostrate(演示) how to get child status./n");
13 if((child=fork())==-1)/*当fork调用失败时候(内存不足或者用户的最大进程数已到,fork返回-1)*/
14 {
15 printf("Fork Error: %s/n",strerror(errno));
16 exit(1);
17 }
18 else if(child==0)
19 {
20 int i;
21 printf("I am the child:%ld/n",getpid());
22 for(i=0;i<1000000;i++) sin(i);
23 i=5;
24 printf("I exit with %d/n",i);
25 exit(i);
26 }
27 while(((child=wait(&status))==-1)&(errno==EINTR));/*wait调用会使父进程阻塞直到一个子进程结束或者是父进程接受到了一个信号,如果没有父进程没有子进程或者他的> 子进程已经结束了wait会立即返回。成功时候,wait将返回进程ID,否则返回-1,并设置全局变量errno.stat_loc是子进程的退出状态.子进程调用exit,_exit或者return 来设置这个
值。为了得到这个值,Linux定义了宏来测试这个返回值.WIFEXITED: 会使父进程阻塞直到一个子进程结束或者是父进程接受到了一个信号,如果没有父进程没有子进程或者他的子进> 程已经结束了wait会立即返回。成功时候,wait将返回进程ID,否则返回-1,并设置全局变量errno.stat_loc是子进程的退出状态.子进程调用exit,_exit或者return 来设置这个值,> 为了得到这个值,Linux定义几个宏来测试这个返回值。WIFEXITED:判断子进程退出值是否0,WEXITSTATUS:判断子进程的退出值(子进程退出非0);WIFSIGNALED:子进程由于没有获> 得信号而退出*/
28 if(child==-1)
29 printf("Wait Error: %s/n",strerror(errno));
30 else if(!status)
31 printf("Child %ld terminated normally return status is zero /n",child);
32 else if(WIFEXITED(status))
33 printf("Child %ld terminated normally return status is %d/n",child,WEXITSTATUS(status));
34 else if(WIFSIGNALED(status))
35 printf("Child %ld terminated due to signal %d znot caught/n",child,WTERMSIG(status));
36 return 0;
37 }