第7章进程环境总结
1 进程终止方式
正常终止:
1)从main返回
2)调用exit函数(先执行一些清理函数,atexit函数可以设置清理函数,再进入内核)
3)调用_exit或_Exit(直接进入内核)
4)最后一个线程从启动例程返回
5)最后一个线程调用pthread_exit
异常终止:
1)调用abort
2)接到信号终止
3)最后一个线程对取消请求做出响应
2 环境表
环境指针是一个全局变量,声明extern char **environ后可用
环境指针是环境表的首地址,环境表是环境字符串数组,环境字符串形如 name=value
获取环境变量:
char *getenv(const char *name)
设置环境变量:
int putenv(char *str) int setenv(cosnt char *name,const char *value,int rewrite) int unsetenv(const char *name)
环境表位于程序空间的最上面,如果添加新的环境变量,则需要重新分配存储区,并将环境表复制到该存储区(malloc或realloc)
3 程序存储空间
命令行参数和环境表
栈
堆
未初始化数据
初始化数据
正文段
4 长跳转语句
#include <setjmp.h> int setjmp(jmp_buf env) void longjmp(jmp_buf env,int val)
setjmp设置跳转回到的地方,并用jmp_buf类型对象保存栈状态信息,直接调用返回0,同longjmp跳转返回val
longjmp在跳转处调用,并将val作为setjmp的返回值
5 资源限制
#include <sys/resource.h> int getrlimit(int resource,struct rlimit *rlptr) int setrlimit(int resource,const struct rlimit *rlptr)
linux支持的资源限制有:
RLIMIT_AS:进程可用存储区最大长度
RLIMIT_CORE:core文件最大字节数
RLIMIT_CPU:CPU最大量值,超过此值,向进程发送SIGXCPU信号
RLIMIT_DATA:数据段最大字节数(初始化数据段、非初始化数据段、堆的总长度)
RLIMIT_FSIZE:可创建文件最大字节长度
RLIMIT_LOCKS:进程持有文件锁最大数
RLIMIT_NOFILE:进程能打开的最大文件数
RLIMIT_STACK:栈的最大字节数
struct rlimit结构记录对某个资源限制的软限制值和硬限制值
struct rlimit
{
rlim_t rlim_cur;
rlim_t rlim_max;
};