笔者将《unix环境高级编程》主要内容总结为三篇:文件篇,进程篇,高级io和进程间通讯三大板块。本文是unix环境高级编程系列文章第二篇:进程篇。该篇主要包括:node
介绍进程相关的基本概念和使用环境:进程执行前的准备工做,进程如何终止,进程执行相关的环境变量表,进程执行时的内存空间布局,内存如何分配linux
主要介绍进程控制符,进程如何建立,如何执行,如何终止,等待终止ios
主要介绍进程之间的关系,包括:进程组,会话,控制终端。以及unix底层的数据结构如何创建他们之间的关系算法
主要介绍信号的概念,如何设置信号处理函数,收到信号致使系统中断的调用以及能自动重启的调用。而后介绍如何发送信号,如何屏蔽信号,以及致使的信号阻塞shell
主要介绍线程的概念,线程标识符,线程如何建立,如何终止,等待终止状态,设置自定义清理程序。而后对比了进程和线程相关概念和接口的对比。最后介绍线程的同步,包括:互斥量,读写锁,条件变量编程
主要介绍线程属性,同步属性:互斥量属性,读写锁属性,条件变量属性。而后介绍如何建立线程私有数据。最后介绍信号和fork对线程的影响数组
主要说明守护进程的特征,常见的系统守护进程,以及守护进程的编程规则。而后介绍处理守护进程的通用日志架构,最后介绍守护进程的一些惯例缓存
进程执行从main函数开始,在这以前须要一些准备工做安全
每一个程序都会接收到一张环境表。环境表是一个字符指针数组,每一个指针包含一个以null结束的c字符串地址。全局变量environ表示该地址 bash
c程序由下面几部分组成:
正文段:cpu执行的机器指令部分。正文段有可被共享,只读的特性。
数据段(初始化数据段):包含程序中明确赋初始值的变量
非初始化数据段(bss段):函数外申明的未初始化数据
栈:局部变量,函数调用所需信息。每次调用时的返回地址等信息都存放在栈。栈从高地址向低地址方向增加
堆:动态存储分配。位于非初始化数据段和栈之间
使用size命令能够查看各个部分的大小
分配器出错难于追踪,不少替代的分配器在分配或释放时,会进行附加的操做,以便追踪问题
功能相似与fork,区别以下:
前面介绍了终止进程的8中状况。无论哪一种方式,都有一些特性: