笔者将《unix环境高级编程》主要内容总结为三篇:文件篇,进程篇,高级io和进程间通信三大板块。本文是unix环境高级编程系列文章第二篇:进程篇。该篇主要包括:
介绍进程相关的基本概念和使用环境:进程执行前的准备工作,进程如何终止,进程执行相关的环境变量表,进程执行时的内存空间布局,内存如何分配
主要介绍进程控制符,进程如何创建,如何执行,如何终止,等待终止
主要介绍进程之间的关系,包括:进程组,会话,控制终端。以及unix底层的数据结构如何建立他们之间的关系
主要介绍信号的概念,如何设置信号处理函数,收到信号导致系统中断的调用以及能自动重启的调用。然后介绍如何发送信号,如何屏蔽信号,以及导致的信号阻塞
主要介绍线程的概念,线程标识符,线程如何创建,如何终止,等待终止状态,设置自定义清理程序。然后对比了进程和线程相关概念和接口的对比。最后介绍线程的同步,包括:互斥量,读写锁,条件变量
主要介绍线程属性,同步属性:互斥量属性,读写锁属性,条件变量属性。然后介绍如何创建线程私有数据。最后介绍信号和fork对线程的影响
主要说明守护进程的特征,常见的系统守护进程,以及守护进程的编程规则。然后介绍处理守护进程的通用日志架构,最后介绍守护进程的一些惯例
进程执行从main函数开始,在这之前需要一些准备工作
每个程序都会接收到一张环境表。环境表是一个字符指针数组,每个指针包含一个以null结束的c字符串地址。全局变量environ表示该地址
- putenv:参数为name=value的字符串形式,name存在则先删除
- setenv:参数是否存在根据rewrite决定
- unsetenv:删除某个环境变量
c程序由下面几部分组成:
分配器出错难于追踪,很多替代的分配器在分配或释放时,会进行附加的操作,以便追踪问题
功能类似与fork,区别如下:
前面介绍了终止进程的8中情况。不管哪种方式,都有一些特性: