《UNIX环境高级编程》第七章进程环境

1.C程序总是从main函数开始执行的,原型:int main(int argc,char *argv[]);
argc是命令行参数的个数
argc是指向参数的各个指针所构成的数组
2.内核执行C程序时,在调用main前先调用一个特殊的启动例程。可执行程序文件将此启动例程作为程序的起始地址。启动例程从内核取得命令行参数和环境变量值,然后为按照上述方式调用main函数做好安排。(这是由连接编辑器设置的,而连接编辑器则由C编译器调用)
启动例程有点像这样子:
exit(main(argc, argv));


7.3 进程终止
有8中方式使进程终止,其中5种是正常终止,分别是:
1)从main返回
2)调用exit
3)调用_exit或Exit
4)最后一个线程从其启动例程返回
5)从最后一个线程调用pthread_exit
异常终止有三种:
1)调用abort
2)接到一个信号
3)最后一个线程对取消请求做出相应


1.退出函数
3个函数用来正常终止一个程序:_exit和_Exit立即进入内核,exit会先执行一些清理处理,然后返回内核。
这3个函数都带一个整型参数,称为终止状态(或退出状态,exit status)。可以通过shell检查进程终止的状态。
下面三种情况进程终止状态是未定义的:
a.调用这写函数时不带终止状态
b.main函数执行了一个无返回值的return语句
c.main没有声明返回类型为整型
特殊情况:若main的返回类型是整型,并且main执行到最后一条语句时返回,那么进程是终止状态是0.


2.atexit函数
这个函数可以用来登记函数进给进程。登记的函数将由exit自动调用。
按照ISO C的规定,一个进程可以登记多至32个函数。先登记的后调用,同一函数登记多次则会被调用多次。
原型:
#include<stdlib.h>
int atexit(void(fun*)(void));  // 调用时传一个函数指针就可以了。


7.4 命令行参数


7.5 环境表
每个程序都接收到一张环境表。跟参数列表一样,环境表也是一个字符指针数组。其中每个指针包含一个以null结束的C字符串的地址。
全局变量environ则包含了该指针数组的地址。
打印环境表:

extern char** environ; void printEnv() { char **env = environ; while(*env) { printf("%s\n", *env); env++; } }

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zyywjw.html