Unix高级环境编程学习小结(二)
进程环境:
有8种方式使进程终止,五种为正常终止:
(1)main返回
(2)调用exit
(3)调用_exit或_Exit
(4)最后一个线程返回
(5)从最后一个线程调用pthread_exit()
异常终止有三种:
调用abort
接到一个信号(异常信号)
最后一个线程对取消请求作出响应。
C程序的存储空间分配:
malloc:分配制定字节数(sizeof)的存储区,此存储区中的初始值不确定。
calloc :分配指定长度,指定数量的存储区,每一位都初始化为0
realloc:增加或减少以前分配区的长度,增加长度时,可能需要移动到另外一个足够大的区域。
Fork函数的工作原理:
fork主要用来创建进程,在fork之后经常跟随者exec,所以现在的很多实现并不执行一个父进程数据段、栈和堆的完全副本,作为替代,使用了写时复制的技术,这鞋区域由父进程和子进程共享,内核将权限改为只读,如果父进程和子进程中的任一个试图修改这些区域,内核就会为这块区域单独创建一个副本,用来修改。所以子进程中修改数据是不影响父进程的。
文件描述符方面,在重定向父进程的标准输出是,子进程的标准输出也被重定向,因为fork的一个特性是父进程的所有打开的文件描述符都被复制到子进程中,父进程和子进程的每个相同的打开描述符共享一个文件表项。所以,当父进程和子进程同时写如一个文件,又没有同步操作时,就会产生混乱。
竞争条件:
当多个进程都企图对共享数据进行某种处理,而最后的结果又取决于进程运行的顺序时,我们就认为发生了竞争条件。
进程调度:
调度策略和调度优先级是由Unix内核确定的,进程可以通过调整nice值选择以不同的优先级运行,nice值越高,优先级就越低,因为你越友好,就越不用多给你分配资源,资源会分配优先给那些不友好的进程,保证他们顺利运行。
进程可以设组合为进程组,进程组有组长进程,组长进程可以创建一个进程组,创建该组中的进程,终止进程。
多个进程组可以组成一个会话即Session