第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;

 };

posted @ 2014-12-04 15:00  bupt_lyn  阅读(160)  评论(0编辑  收藏  举报