进程ID的唯一性,多数UNIX系统采用的延迟重用(防止新进程的ID被认为是已经被删除进程的ID)策略。。。
系统中存在一些专用进程:
(1)ID为0的进程通常是调度进程(交换进程)swap,它不执行任何磁盘程序,因此被称为系统进程
(2)ID为1的进程为init进程,在系统启动结束时由内核调用,程序文件为/etc/init 或/sbin/init...
该进程负责启动一个unix系统,通常会读取与系统有关的一些初始化文件如/etc/rc*,/etc/inittab,/etc/init.d以将系统引导至一个状态(例如多用户)
(3)每个系统还有自己的一些提供操作系统服务的内核进程,如用于提供虚拟存储器服务的分页服务的页守护进程(pagedaemon)
进程标识符
getpid/getppid
getuid/geteuid
getgid/getegid
六个获取进程相关标识符的函数
fork系统调用,子进程是父进程的副本
(1)子进程复制父进程的数据空间,堆和栈,保留一份自己的副本(由于fork后通常会执行exec,所以实际上采用了写时复制机制(copy on write)COW,上述区域由父子进程共享,内核将其访问权限改为只读,当父子进程任一方试图修改,则引起复制操作,通常是虚拟存储器系统中的一页拷贝。)
(2)共享正文段/代码段
关于文件共享,fork的一个特性是子进程获得父进程的打开进程描述符表,也即引用同样的一些文件指针,对这些文件的操作将以交互的形式实现。。
除了打开文件之外,子进程继承了父进程的其它特性,包括
(1)各种用户ID,组ID,其它ID/相关标志
(2)控制终端(这其实就是打开文件描述符表的几个特定项)
(3)当前工作目录,根目录
(4)文件创建模式屏蔽字,信号相关等
(5)环境
(6)连接的共享存储端。。。。这是什么?
(7)存储映射,资源限制
主要区别(都是些高级特性)有,(1)文件锁未被继承,(2)未处理信号集置空,(3)未处理闹钟清除,时间相关的东西置0...
OVER!!!
下一节研究,wait系列系统调用,竞争条件,和exec系统调用。。。