APUE 进程环境

进程的基本环境

1、main主函数原型

int main( int argc, char *argv[]);

在exec函数执行main函数前,先调用一个特殊的启动例程,改启动例程为程序的起始地址,

目的是为了从内核获取进程的命令行参数和环境变量

2、进程的终止

终止进程的方法有好多种,常用的有

(1)从main返回

return 其实是调用exit函数。

exit函数执行标准I/O库的清理关闭工作,fclose所有已打开的流,flush已修改数据。

(2)abort

(3)调用exit函数

(4)接收到信号

...

3、命令行参数

argc为命令行参数的个数,argv为命令行数组。数组大小为argc+1,最后一个值为NULL

4、环境表

全局变量environ指向环境表的起始地址,环境表是一个字符串数组,数组中存放的是name=value形式的C 字符串

5、C程序的存储空间布局

正文段是可以共享的,是只读的,防止被修改。bss段是不存储在磁盘程序文件中的,因为该段的变量都会被exec函数初始化为0或null,

正文段和初始化的数据会被存放在磁盘程序文件中。

命令行参数和环境变量存储在最高的地址空间内,对他们的修改相当麻烦,因为空间有限。有时需要重新申请空间,或者复制空间。

6、共享库

共享库其实是已被编译的中间文件,二进制形式。共享库使得可执行文件中不在需要包含公用的函数,只需引用共享库的函数即可。

调用动态库的好处在于可以减少可执行文件的大小,更新库不用修改源程序,坏处在于增加了运行时间开销,在当程序第一次被执行或者第一次调用共享库时。

-static参数指定调用静态库,不加则调用动态共享库

size 命令查看程序各个字段的大小

时间: 2024-10-04 20:11:07

APUE 进程环境的相关文章

读书笔记-APUE第三版-(7)进程环境

本章关注单进程运行环境:启动&终止.参数传递和内存布局等. 进程启动终止 如图所示: 启动:内核通过exec函数执行程序,在main函数运行之前,会调用启动例程(start-up routine),取得命令行参数和环境变量.可以把启动例程理解为exit(main(argc,argv)). 终止:五种正常终止方式(从main方法返回/exit/_exit/最后一个线程返回/最后一个线程退出):三种异常终止方式(abort/接收到信号/最后一个线程接收到取消请求). exit与_exit关系:exi

APUE学习笔记:第七章 进程环境

7.1 引言 本章将学习:当执行程序时,其main函数是如何被调用的:命令行参数是如何传送给执行程序的:典型的存储器布局是什么样式:如何分配另外的存储空间:进程如何使用环境变量:各种不同的进程终止方式等:另外还将说明longjmp和setjmp函数以及它们与栈的交互作用:还将介绍研究进程的资源限制 7.2 main函数 C程序总是从main函数开始执行.当内核执行C程序时,在调用main前先调用一个特殊的启动例程.可执行程序文件将此启动例程指定为程序的起始地址——这是由连接编辑器设置的,而连接编

Unix编程第7章 进程环境

准备雄心勃勃的看完APUE,但是总感觉看着看着就像进入一本字典,很多地方都是介绍函数的用法的,但是给出例子远不及函数介绍的多.而且这本书还是个大部头呢.第7章的讲的进程环境,进程是程序设计中一个比较重要的概念,知道倒是知道它的大概意思,但是其实还是有很多的细节其实都没有深究,这章呢APUE就带着我们逛了一下如下的几个主题(尼玛,学C语言的话,学那点语法其实不是很重要,反而经常把时间浪费在语法的蹩脚处): 1.程序执行的时候main函数是如何被调用的 2.命令行参数是如何传递给新程序的: 3.典型

《Unix环境高级编程》读书笔记 第7章-进程环境

1. main函数 int main( int argc, char *argv[] ); argc是命令行参数的数目,包括程序名在内 argv是指向参数的各个指针所构成的数组,即指针数组 当内核执行C程序时(使用exec函数),在调用main前先调用一个特殊的启动例程.可执行程序文件将此启动例程指定为程序的起始地址——这是由连接器设置的,而连接器则是由C编译器调用.启动例程从内核取得命令行参数和环境变量值,然后按上述方式调用main函数做好安排. 2. 进程终止 有8种方式使进程终止,其中5种

通过IsDebuggerPesent解说windows PEB进程环境块结构

首先介绍PEB和TEB概念: PEB(Process Environment Block.进程环境块)存放进程信息.每一个进程都有自己的PEB信息.位于用户地址空间. TEB(Thread Environment Block.线程环境块)系统在此TEB中保存频繁使用的线程相关的数据.位于用户地址空间.在比 PEB 所在地址低的地方. 进程中的每一个线程都有自己的一个TEB. 写一个使用IsDebuggerPesent函数的windows程序.用OD打开,断点IsDebuggerPesent函数

通过IsDebuggerPesent讲解windows PEB进程环境块结构

首先介绍PEB和TEB概念: PEB(Process Environment Block,进程环境块)存放进程信息,每个进程都有自己的PEB信息.位于用户地址空间. TEB(Thread Environment Block,线程环境块)系统在此TEB中保存频繁使用的线程相关的数据.位于用户地址空间,在比 PEB 所在地址低的地方.进程中的每个线程都有自己的一个TEB. 写一个使用IsDebuggerPesent函数的windows程序,用OD打开,断点IsDebuggerPesent函数 OD进

windows - 进程 - 进程环境变量

原文链接1 原文链接2 1.进程的环境变量 每个进程都有一个与它关联的环境块(environment block),这是在进程地址空间内分配的一块内存,其中包含字符串类似于: =::=::\... VarName=VarValue\0... \0 除第一个=::=::\外,块中可能还有其他字符串是以等号开头的,这种字符串不作为环境变量使用. 访问环境块的两种方式: 1)调用GetEnvironmentStrings获取完整的环境块 2)CUI程序专用,通过应用程序main入口点函数所接收的TCH

Linux/UNIX之进程环境

进程环境 进程终止 有8种方式使进程终止,当中5中为正常终止,它们是 1)      从main返回 2)      调用exit 3)      调用_exit或_Exit 4)      最后一个线程从其启动例程返回 5)      最后一个线程调用pthread_exit 异常终止有3中方式 6)      调用abort 7)      接到一个信号并终止 8)      最后一个线程对取消请求做出对应 exit函数 #include <stdlib.h> void exit(int

Unix环境高级编程(五)进程环境

本章主要介绍了Unix进程环境,包含main函数是如何被调用的,命令行参数如何传递,存储方式布局,分配存储空间,环境变量,进程终止方法,全局跳转longjmp和setjmp函数及进程的资源限制. main函数的原型为int main(int argc,char *argv[]);其中argc是命令行参数的数目,argv是指向参数的各个指针构成的数组.当内核执行C程序时,使用一个exec函数,在调用main函数前线调用一个特殊的启动例程,从内核获取命令行参数和环境变量. 进程终止分为正常终止和异常