进程相关知识
第一,Linux进程的运行,是通过调用系统函数exec来执行程序的main函数,作为入口,来启动程序的。
第二,进程的终止,
正常终止:
a) 从main返回,
b)调用exit 函数,会调用相关清理函数
c) 调用_exit函数,直接终止,不做清理操作
异常终止:
d) 调用abort
e) kill sigterm 等,有一个信号终止,属于被动终止。
ansi c 规定,调用函数int atexit(void func(void)); 来登记最多32个退出相关的清理函数。
第三、环境表
每个程序(进程)都会接受一个环境表,全局变量environ指针包含了指向环境表的地址。
posix 规定可以通过getenv 和setenv 函数来获取和设置环境变量,以key:value的形式操作。
第四:进程的内存布局
由以下五部分构成:
正文段:即程序段,是由cpu执行的机器指令构成。可共享,但不可以随意更改,是只读的。
初始化数据段:即数据段,包含了需赋值的变量。如全局变量等。
非初始化数据段:即BSS段,程序开始前,内核将此段设为0。一般局部变量,不经初始化的,放在此处。
栈:自动变量以及函数调用是各种参数和返回地址等信息,保存在此。
堆:一般是动态申请分配的内存,
第五,共享库
程序通过动态连接方法与共享库函数相连接。
第六,限制资源
每个进程都有一组资源限制,通过getrlimit, setrlimit 查询和修改。头文件是 <sys/resource.h>