UNIX进程的环境(一)
2016-02-01 本文已影响62人
千里山南
2016-02-01
main函数
c程序总是从main函数开始执行。main函数原型
int main(int argc, char *argv[])
其中 argc 是命令行参数的数目,argv是指向参数各个指针所构成的数组
当内核启动c程序时(通过exec函数)在调用main前先滴啊用一个特殊的启动例程。可执行程序文件将此启动例程指定为程序的起始地址。这是由连接编辑程序设置的,而链接编辑程序则由c编译程序调用。启动例程从内核取得命令行参数和环境变量,然后为调用main函数做好安排。
进程终止
有5中方式使进程终止
- 正常终止:
- 从main返回
- 调用exit
- 调用_exit
- 异常终止
- 调用abort
- 由一个信号终止
上节提到的启动例程是这样编写的,使得从main返回后立即调用exit函数
exit和_exit
exit和_exit函数用于正常终止一个程序:_exit立即进入内核,exit则先执行一些清除处理(关闭标准io等)然后进入内核
#include<stdlib.h>
void exit(int status)
#include<unistd.h>
void _exit(int status);
exit 和 _exit都带有一个整型参数,称为终止状态。大多数unix shell都提供检查一个进程终止状态的方法。如果调用这些函数时不带终止状态或者main 执行了一个无返回值的return语句,或者main执行隐式返回,则进程的终止状态是未定义的,程序是不完整的。
atexit函数
按照ANSI C规定,一个进程可以登记多至32个函数,这些函数由exit自动调用。饿哦们称这些函数称为终止处理程序,并用atexit函数登记这些函数。
int atexit(void (*func)(void))
其中 atexit的参数是一个函数地址,当调用此函数时无需向它传送任何参数。exit 以登记这些函数的相反顺序滴啊用他们,同一函数如若登记多次,则也调用多次。
exit 调用各种终止处理程序然后按需多次调用fclose关闭所有打开流。