程序清单8-3 8-4 演示不同的exit值


 1 //http://blog.chinaunix.net/uid-24549279-id-71355.html
2 /*
3 ============================================================================
4 Name : test.c
5 Author : blank
6 Version :
7 Copyright : Your copyright notice
8 Description : 程序清单8-3 8-4 演示不同的exit值
9 ============================================================================
10 */
11
12 #include "ourhdr.h"
13 #include <sys/wait.h>
14
15 static void pr_exit(int status);
16
17 int main(int argc, char *argv[])
18 {
19 pid_t pid;
20 int status;
21
22 if ((pid = fork()) < 0){
23 err_sys("fork error");
24 }else if(pid == 0){
25 //child
26 exit(7);
27 }
28
29 /*
30 * wait for child and print its status
31 */
32 if (wait(&status) != pid){
33 err_sys("wait error");
34 }
35
36 pr_exit(status);
37
38 /*
39 * child generates SIGABRT
40 */
41 if ((pid = fork()) < 0){
42 err_sys("fork_error");
43 }else if (pid == 0){
44 abort();
45 }
46
47 /*
48 * wait for child and print its status
49 */
50 if (wait(&status) != pid){
51 err_sys("wait error");
52 }
53
54 pr_exit(status);
55
56 if ((pid = fork()) < 0){
57 err_sys("fork error");
58 }else if(pid == 0){
59 // child divide by 0 generates SIGFPE
60 status/=0;
61 }
62
63 /*
64 * wait for child and print its status
65 */
66 if (wait(&status) != pid){
67 err_sys("wait error");
68 }
69
70 pr_exit(status);
71 }
72
73 static void pr_exit(int status)
74 {
75 if (WIFEXITED(status)){
76 printf("normal termination, exit status = %d\n", WEXITSTATUS(status));
77 }else if (WIFSIGNALED(status)){
78 printf("abnormal termination, signal number=%d%s\n", WTERMSIG(status),
79 #ifdef WCOREDUMP
80 WCOREDUMP(status) ? " (core file generated )" : "");
81 #else
82 "");
83 #endif
84 }else if(WIFSTOPPED(status)){
85 printf("child stopped, signal number=%d\n", WSTOPSIG(status));
86 }
87 }

程序清单8-3 8-4 演示不同的exit值

时间: 2024-11-16 19:22:58

程序清单8-3 8-4 演示不同的exit值的相关文章

[C++ Primer Plus] 2、处理数据(一)程序清单

一.程序清单3.1(变量的一些知识点) 1 #include<iostream> 2 #include<climits> 3 using namespace std; 4 5 void main() 6 { 7 cout<<"int is "<<sizeof(int)<<" bytes"<<endl; 8 cout<<"short is "<<size

APUE 线程 - 程序清单

程序清单11-1 打印线程ID #include "util.h" #include<pthread.h> pthread_t ntid; void printids(const char *s) { pid_t pid; pthread_t tid; pid = getpid(); tid = pthread_self(); //之所以打印16进制,便于pthread_t是结构体的话看地址: printf("%s pid %u tid %u (0x%x)\n&q

[C++ Primer Plus] 4、复合类型(一)程序清单

程序清单4.1 1 #include<iostream> 2 using namespace std; 3 4 void main(){ 5 int yams[3]; 6 yams[0]=7; 7 yams[1]=8; 8 yams[2]=6; 9 int yams_cost[3]={20,30,5}; 10 11 cout<<"Total yams="<<yams[0]+yams[1]+yams[2]<<endl; 12 cout<

[C++ Primer Plus] 7、分支语句和逻辑运算符(一)程序清单

程序清单6.2 #include<iostream> using namespace std; void main() { char ch; cout << "Type, and I shall repeat.\n"; cin.get(ch); while(ch != '.') { if (ch == '\n') cout << ch; else cout << ++ch; cin.get(ch); } system("paus

C Primer Plus 第十二章程序清单……2015.5.10

C Primer Plus           第五版 第十二章  程序清单 #include<stdio.h> int main() { int x=30; printf("x in outer block:%d\n",x); { int x=77; printf("x in inner block:%d\n",x); } printf("x in outer block:%d\n",x); while(x++<33) { i

dogs.cpp_程序清单1.1_C源代码的例子(《C Primer Plus》_P17)

// dogs.cpp : 定义控制台应用程序的入口点. // /* 时间:2018年05月29日 20:04:07 目的:printf scanf 基本用法 代码练习:<C Primer Plus>P17 程序清单1.1 C源代码的例子 */ #include "stdafx.h" // 在vs2010 的头文件 ,旧版: # include <stdio.h> //括号里面分别定义了一个整数型的参数个数(int argc )和一个char类型的指针表示参数的

程序清单2.1_first.c程序_《C Primer Plus》P15

// first.cpp : 定义控制台应用程序的入口点. // /* 时间:2018年05月29日 22:49:40 代码:程序清单2.1_first.c程序_<C Primer Plus>P15 目的:进一步了解 printf()函数,定义变量与赋值 及 (\n)含义 */ #include "stdafx.h" int _tmain(int argc, _TCHAR* argv[]) /* 一个简单的 C 程序 */ { int num; /* 定义一个名为 num

程序清单2.3_two_func.c_《C Primer Plus》P25

// two_func.cpp : 定义控制台应用程序的入口点. // /* two_func.c -- 在一个文件中使用两个函数 */ /*     时间:2018年05月30日 22:53:38     代码:程序清单2.3_two_func.c_<C Primer Plus>P25     目的:在一个文件中使用两个函数,了解函数使用的位置 */ #include "stdafx.h" void butler(void);    /* ISO/ANSI C 函数原型 

程序清单2.2_fathm_ft.c_《C Primer Plus》P24

// fathm_ft.cpp : 定义控制台应用程序的入口点. // /*     时间: 2018年05月30日 22:28:40     代码:程序清单2.2_fathm_ft.c_<C Primer Plus>P24     目的:* 是代表乘法的符号 */ #include "stdafx.h" int _tmain(int argc, _TCHAR* argv[]) {     int feet, fathoms; //feet(英尺);fathom(英寻);