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