理解fork()的最重要的点是,你fork了一次,但它返回了两次:一个是在父进程里,一个是在子进程里。
当你fork了一个新进程,子进程返回的进程ID是0。父进程里fork返回的是子进程的PID。
pid = fork()
print(pid)
你会发现打印出两个值,第一个是父进程返回的子进程的pid=xxx,第二个是子进程返回的pid=0
当父进程fork了一个新的子进程,子进程就获取了父进程文件描述符的拷贝。在调用fork后,父进程和子进程共享相同的文件描述符。内核使用描述符引用计数来决定是否关闭文件/socket,当描述符计数为0,则关闭文件/socket。
服务器父进程的角色是:现在它所需要做的就是接受一个新连接,fork一个子进程来处理这个请求,然后循环接受新连接。