(1)fork()的定义服务器
fork()函数是Unix中派生新进程的惟一方法,声明以下:网络
咱们须要理解的是,调用一次fork()方法,该方法会返回两次。一次是在调用进程(也就是派生出的子进程的父进程)中返回一次,返回值是新派生的进程的进程ID。一次是在子进程中返回,返回值是0,表明当前进程为子进程。若是返回值为-1的话,则表明在派生新进程的过程当中出错。并发
那么在程序中,咱们就能够根据此返回值来判断当前进程是父进程仍是子进程,来实现一些具体的操做。例如:函数
(2)fork()的实质过程spa
父进程中在调用fork()派生新进程,实际上至关于建立了进程的一个拷贝;即在fork()以前的进程拥有的资源会被复制到新的进程中去。网络服务器在处理并发请求时,也能够采起这种派生新进程的方式: 父进程调用accept()后调用fork()来处理每个链接。那么,所接受的已链接的套接口随后就在父子进程中共享。一般来讲,子进程会在这链接套接口中读和写操做,父进程则关闭这个已连的套接口(能够参考:http://blog.csdn.net/moxiaomomo/article/details/6791763).net
(3)fork()的用法blog
fork()有两个典型用法:(1)一个进程进行自身的复制,这样每一个副本能够独立的完成具体的操做,在多核处理器中能够并行处理数据。这也是网络服务器的其中一个典型用途,多进程处理多链接请求。 (2)一个进程想执行另外一个程序。好比一个软件包含了两个程序,主程序想调起另外一个程序的话,它就能够先调用fork来建立一个自身的拷贝,而后经过exec函数来替换成将要运行的新程序。接口