首页 > 代码库 > 多进程编程总述

多进程编程总述

1、进程创建:fork函数族

    fork()和vfork()函数的区别:

    (1) fork ( ):子进程拷贝父进程的数据段,代码段
          vfork( ):子进程与父进程共享数据段

    (2) fork( )父子进程的执行次序不确定
          vfork 保证子进程先运行,在调用exec 或exit 之前与父进程数据是共享的,在它调用exec或exit 之后父进程才可能被调度运行。也就是说父进程在子进程调用exec或exit函数族之前一直保持阻塞。

    (3) vfork( )保证子进程先运行,在它调用exec 或exit 之后父进程才可能被调度运行。如果在 调用这两个函数之前子进程依赖于父进程的进一步动作,则会导致死锁。

    注:fork( )返回0为子进程;返回>0为父进程,返回值为子进程ID;返回<0,进程创建错误。

2、进程中启动另一个程序的运行:exec函数族

    一个进程一旦调用exec类函数,它本身就"死亡"了,系统把代码段替换成新的程序的代码,废弃原有的数据段和堆栈段,并为新程序分配新的数据段与堆栈段,唯一留下的,就是进程号,也就是说,对系统而言,还是同一个进程,不过已经是另一个程序了。