进程相关知识的整理

来源:互联网 发布:淘宝店铺做淘宝客 编辑:程序博客网 时间:2024/05/17 01:01
  关于进程 :fork 以及 vfork 之间的一些比较。
fork :1.使用fork创建进程时,子进程采用COW(写时复制)技术复制父进程中的内容。
      2.子进程具有独立的地址空间,相同的变量,在父进程中发生变化并不会影响子进程中的变量。
 3.fork之后的程序会分别被父进程以及子进程执行一遍,即一共执行两次。
 4.fork的父子进程并没有确定的执行顺序。
 
vfork :1.vfork功能也是启动一个进程,使用其启动的进程,父子进程共用一个地址空间,内容都是共享的。
        2.vfork启动的进程,有特定的执行顺序,子进程首先执行,而在子进程为结束之前父进程会处于阻塞状态。
3.其中一个进程中的变量发生变化会影响另一个进程中对应的数值。
4.vfork产生的子进程必须使用exit()函数来将他结束。


两种特殊的进程 :1.孤儿进程 :子进程在未结束之前,其父进程先行结束(死亡),此时该子进程的父进程就变成了pid = 1的初始进程。
2.僵尸进程: 子进程结束的时候,由于父进程忙于执行其他的程序而无法为其收尸(即回收它),这时它就变成了僵尸进程。
(僵尸进程过多会导致系统崩溃,所以要预防其的产生,为预防僵尸进程,我们可以调用wait和waitpid函数。
 
进程的退出:1.正常退出: return ,exit(),_exit()
            2.异常退出: about函数,进程收到某种信号,使其退出。


进程间的通信: 1.管道通信:管道通信是单向的,而且其中的数据一旦被读出就会被删除。
                管道通信分为无名管道和有名管道,无名管道针对有亲缘关系的进程,有名管道无这种限制。
  2.共享空间:共享空间在内存上创建一块空间,可以被多个进程共享。(可类比于公告栏)
               3.信号:产生可由硬件产生,也可以由软件产生。处理方式有三种:忽略,执行和捕捉。