Linux编程进阶
来源:互联网 发布:延吉市2016年经济数据 编辑:程序博客网 时间:2024/06/09 21:10
Linux如何执行一个程序
Linux中的程序是一个在磁盘上的可执行文件,内核调用exec函数先将这个可执行文件调入存储器中,然后执行它。
这个程序的执行实例被称为进程,在Linux中每个进程都对应一个唯一的非负数字标识符,称为进程ID。
8种进程终止方式
对于一个进程而言,有8种方式可以使得其终止,具体说明如下:
- 从main函数中使用return语句返回。
- 调用exit函数终止进程。
- 调用_exit 或者 _Exit函数终止进程。
- 最后一个线程从其启动例程返回。
- 最后一个线程调用了pthread_exit函数。
- 调用abort函数。
- 接到一个信号并终止。
- 最后一个线程对取消请求做出了响应。
总之:
在Linux操作系统中,内核是程序执行的唯一方法是调用一个exec函数 ,进程自愿终止的唯一方法是显式或者隐式地调用_exit 或者 _Exit,又或者使用一个外部信号来使得该进程终止。
Linux程序存储空间
编译生成的可执行文件的存储空间可以分为如下几个部分:
- 正文段:存放了处理器执行的机器指令,通常来说,正文段是可以共享的,所以包括Shell、gcc在内的程序在存储器中只需有一个副本。通常来说,正文段也是只读的。
- 初始化数据段(全局静态变量、cosnt 变量):初始化数据段通常又被称为数据段,其包含了程序中需要进行初始化的变量值。例如:
int couter = 0;//counter 被初始化为0,然后存放在初始化的数据段中//通常来说这些变量会是全局变量//因为非全局变量会在调用的时候在分配空间并进行初始化
- 非初始化数据段:用来存放不需要进行初始化的变量,又被称为BSS段。
- 栈:这个段用来存放自动变量(auto)以及每次函数调用(函数调用栈)时需要保存的信息。
- 堆:用于动态存储分配,这个段位于非初始化数据段与栈之间,在很多场合下这个段和栈一起被合称为堆栈段。
注意:
对于一个可执行文件而言,其通常还有若干其他类型的段,例如,包含了符号表的段、包含了gdb调试信息的段和包含了动态共享库连接表的段等,但是这些段并不会在进程调用的时候被装入存储区中。
0 0
- Linux编程进阶
- linux shell编程进阶学习
- Linux shell进阶应用与shell编程
- Linux内核模块编程-proc文件系统进阶
- linux 高级网络编程进阶之rawsocket
- Linux编程用户和用户组进阶命令
- Linux shell编程之分支判断进阶
- Linux进阶命令和Shell编程
- 编程进阶
- 编程进阶
- 编程进阶
- 编程进阶
- Linux shell进阶应用与shell编程[引用, 非原创]
- 由尚德Linux内核编程进阶篇视频教程
- linux内核模块编程之进阶(三)
- Linux系统编程(17)——正则表达式进阶
- Linux Shell编程进阶案例实战(三)
- Linux系统进阶路线路(系统管理+内核编程)
- Python3.x和Python2.x的区别
- 如何调试分析Android中发生的tombstone
- c++ explicit
- Erlang 内存泄漏分析
- Java 开发中 vo是什么,和po有什么不同,pojo又是什么
- Linux编程进阶
- Python模块学习笔记— —time与datatime
- apache常用命令整理
- 学习笔记:MVVM模式 ReactiveCocoa 和 MVVM 入门
- java json字符串解析--遇到的问题
- 片纸只字
- XML基本内容学习笔记
- 重拾
- 链接<a>标签