Linux 进程环境
来源:互联网 发布:可以拍电影的软件 编辑:程序博客网 时间:2024/06/08 14:29
进程终止:
C程序的终止分为两种: 正常终止和异常终止.
正常终止分为:
1.main函数return,
2.exit
3._exit或 _Exit
4.最后一个线程返回
5.最后一个线程pthreade_exit
异常中指分为: abort, SIGNAL, 线程响应取消
#include <stdio.h>#include <stdlib.h>pthread_t pid = 1;void (*__func) (void);void func1(){ printf("func1\n");}void func2(){ printf("func2\n");}void func3(){ printf("func3\n");}int main(void){ atexit(func1); atexit(func2); atexit(func3); return 0;}函数由exit按登记相反的顺序自动调用
但是如果用_exit()退出程序,则它不关闭任何文件,不清除任何缓冲器、也不调用任何终止函数
一、正文段。可执行程序在存储空间的的副本,cpu执行的机器指令部分。
二、初始化的数据段。它包含明确地赋初值的变量。如: int a = 1; 此变量放于数据段。
三、未初始化的数据段。 内核将此段中的数据初始化为0或者空指针。出现在任何函数外的c声明 ,long sum[1000];此变量存放在非初始化数据段中。
四、栈。每次函数调用时,其返回地址以及调用者的环境信息都存放在栈中。最近被调用的函数在栈上为其自动和临时变量分配存储空间。每次函数调用结束后,系统会自动收回内存。(见下面的程序1说明)
五、通常在堆中进行动态存储分配。每次函数被调用结束后,系统不会收回内存。如下图所示:
int a=0; //a在全局已初始化数据区 char *p1; //p1在BSS区(未初始化全局变量) main() { int b; //b为局部变量,在栈区 char s[]="abc"; //s为局部数组变量,在栈区 //"abc"为字符串常量,存储在已初始化数据区 char *p1,*p2; //p1,p2为局部变量,在栈区 char *p3="123456"; //p3在栈区,123456\0在已初始化数据区 static int c=0; //c为局部(静态)数据,在已初始化数据区 //静态局部变量会自动初始化(因为BSS区自动用0或NULL初始化) p1=(char*)malloc(10); //分配得来的10个字节的区域在堆区 p2=(char*)malloc(20); //分配得来的20个字节的区域在堆区 free(p1); free(p2); p1=NULL; //显示地将p1置为NULL,避免以后错误地使用p1 p2=NULL; }
1、 经过初始化的全局变量和静态变量保存在数据段中。
2、 未经初始化的全局变量和静态变量保存在BSS段。
3、 函数内部声明的局部变量保存在堆栈段中。
0 0
- Linux 进程环境
- Linux环境编程--进程
- Linux之进程环境
- 【Linux C】进程环境
- 关于Linux进程环境
- Linux 进程环境
- linux 进程环境
- Linux进程环境
- Linux-进程环境
- Linux的进程环境
- linux进程环境及进程属性
- Linux环境进程间通信
- Linux环境进程间通信
- Linux环境进程间通信
- Linux环境进程间通信
- LINUX环境进程间通信
- Linux环境进程间通信
- Linux环境进程间通信
- Android学习笔记之BroadcastReceiver
- 进军Docker 1.12,将代理与Swarm完美整合
- NDK: multiple definition of 'typeinfo for XXX' "vtable for xxx" 错误
- 不同浏览器扫描二维码后跳转到不同的网址
- zzulioj -- 1908 小火山的围棋梦想
- Linux 进程环境
- Java异常处理
- RESTful WebService入门
- 自定义卡尺选择器
- log4J日志框架
- 【杭电1257】最少拦截系统(LIS)基础
- DataGrid嵌套在handler方法中获取当前的DataGrid
- 04.格式化输入输出
- jquery radio 没选中,点击后,选中;选中后,点击,不再选中;