7.3 进程终止
(1) 有三种函数用于正常终止一个程序:——exit和_Exit立即进入内核,exit则先执行一些清除处理(包括调用执行各终止处理程序,关闭所有标准IO流),然后进入内核
历史上若main函数终止时没有显示使用return语句或调用exit函数,那么进程的终止状态时未定义的
void exit(int status);
void _Exit(int status);
void _exit(int status);
(2) atexit()函数
int atexit(void (*func)(void)); 返回值:成功0,出错返回非0值
ISOC规定,一个进程最多可以登记32个函数,这些函数将由exit自动调用,这些函数称为中止处理函数(exit handler)
exit注册终止函数,exit调用这些函数的顺序与它们登记的顺序相反,同一个函数登记多次,也会被调用多次。
7.5 环境表
每个程序都会接收到一张环境表,extern char **environ;
7.6 C程序的存储空间布局
一般分为正文段、初始化数据段、非初始化数据段、栈、堆
7.8 存储器分配
void *malloc(size_t size);
void *calloc(size_t nobj, size_t size);
void *realloc(void *ptr, seze_t newsize); //返回值:成功返回非空指针,出错返回NULL
void free(void *ptr);
7.11 getrlimit和setrlimit函数
int getrlimit(int resource, struct rlimit *rlptr);
int setrlimit(int resource, const struct rlimit *rlptr); //两个函数返回值:成功0,出错非0值
每个进程都有一组资源限制,可以用这两个函数来进行查看和更改。