UNIX环境高级编程--第八章进程控制总结

1.ID为0的进程通常是调度进程,也称交换进程,是内核的一部分,也称系统进程

2.进程ID为1的进程是init进程,在自举过程结束时由内核调用,它不是内核中的系统进程,但它以超级用戶权限运行.

3.在某些虚拟存储器实现中,进程ID为2的是守护进程,此进程负责支持虚拟存储系统的分页操作.

4.fork()函数被调用一次,但返回两次.两次返回的唯一区别是子进程的返回值是0,而父进程的返回值则是子进程的进程ID.

5.strlen()计算不包含终止null字节的字符串长度,而sizeof则计算包括终止null字节的缓冲区长度,两者的另一个差别是,使用strlen需进行一次函数调用,而对于sizeof,因为缓冲区已用已知字符串进行了初始化,其长度是固定的,所以sizeof在编译时计算缓冲区长度.

6.fork()的一个特性是父进程的所有打开文件描述符都被复制到子进程中.如果父,子进程写到同一描述符文件,但又没有任何形式的同步,那么它们的输出就会相互混合.

   fork之后处理文件描述符的两种常见情况:(1)父进程等待子进程完成,(2)父,子进程各自执行不同的程序段,在这样的情况下,在fork之后,父,子进程会关閉它们不需使用的文件描述符,这样就不会干扰到对方使用的文件描述符.

7.vfork用于创建一个新进程,而该新进程的目地是exec一个新程序.    vfork和fork 的一个区别是:vfork保证子进程先运行,在它调用exec或exit之后父进程才可能被调度运行.如果在调用这两个函数之前子进程依赖于父进程的进一步动作,则会导至死锁.

8.不管进程如何终止,最后都会执行内核中的同一段代码.这段代码为相应的进程关閉所有打开描述符,释放它所使用的存储器等.

9.在异常终止情况下,内核(不是进程本身)产生一个指示其异常终止原因的终止状态,该进程的父进程都能用wait或waitpid函数取得其终止状态.

10.在一个进程终止时,内核逐个检查所有活动进程,以判断它是否是正要终止进程的子进程,如果是,则将该进程的父进程ID改为1(init进程),这种处理方法保证了每个进程都有一个父进程.

11.一个已经终止,但是其父进程尚未对其进行善后处理的进程被称为僵死进程.

12.init被编写成无论何时只要有一个子进程终止,init就会调用一个wait函数取得其终止状态,防止系统中有很多僵死进程.

13.IPC:进程间通信.

14.当多个进程都启图对共享数据进行某种处理,而最后的结果又取决于进程运行的顺序时,则我们认为发生了竟争条件.-----没有具体的错误并不意味着竟爭条件不存在.

15.用fork可以创建新进程,用exec可以执行新程序.exit函数和两个wait函数处理终止和等待终止-------基本的进程控制原语.

16.解释器文件:是文本文件,形式: #! pathname [optional-argument]

      pathname通常为绝对路径名.对它不进行什么特殊处理(即不使用PATH进行路径搜索).对这种文件的识别是由内核作为exec系统调用处理的一部分来完成的.内核调用exec函数的进程实際执行的并不是该解释器文件,而是该解释器文件中第一行中pathname所指定的文件.

      其中pathname为解释器

17.使用system的优点:system进行了所需的各种各样的出错处理,以及各种信号处理,

你可能感兴趣的:(UNIX环境高级编程--第八章进程控制总结)