1、fork()函数说明
fork()函数若调用成功有两个返回值:子进程返回0,父进程返回进程标记,出错返回-1。fork()函数将运行的程序分为两个几乎一样的进程,每个进程都是从同一位置启动的线程。两个进程中的线程同时执行,就像两个用户同时启动。
注意:
当调用fork函数时,在该位置的进程一分为二,一个是父进程,一个是子进程。
若调用成功返回两个值,父进程返回子进程的标志,子进程的返回值是0,不成功返回-1.
之所以成功调用会返回两个值是因为复制时,复制了进程的堆栈段。所以两个进程会停留在fork函数中,等待返回。
每个进程都有不一样的进程标识符,可以通过getpid()函数获得,有一个记录父进程pid的变量,可以通过getppid()获得变量的值。
子进程是父进程的副本,他会获得父进程的数据空间、堆、栈、等资源的副本。注意,父子进程是不共享这些空间的。
2、vfork函数
用来创建子进程,但是和fork有区别:
vfork用于创建一个子进程,子进程和父进程共享地址空间,fork的子进程具有独立的地址空间。
vfork保证子进程先运行,在它调用exec或者exit之后,父进程才被调度运行。