fork,创建子进程
1、子进程是父进程的副本,会得到父进程全局、栈、堆上数据的副本,简单说就复制一份其全局、栈、堆上 的内存;
2、当然对于上述内存,不是fork之后马上复制,而是写时复制;
3、子进程得到父进程描述符副本,但是文件是共享的,同时父子进程同时写文件,不会照成混乱,因为文件偏移量对于俩进程是共享的;
当然对于描述符的操作,通常有如下2场景:
1、父进程等待子进程结束,其描述符子进程操作,父进程不予干预,待子进程结束,父进程再操作;
2、有俩描述符,父子进程各自操作自己的,关闭其不使用的,socket编程进场用到。
fork失败的主要原因就是其子进程数太多了,超过了CHILD_MAX定义的最大值
fork常用场景:
1、父子执行不同代码,常用在socket tcp server,父进程socket fd继续listen,子进程socket负责接收发送数据;
2、父子进程执行不同操作,子进程fork出来之后,直接调用exec。
僵死进程:
1、子进程已经exit退出,但是父进程没有调用wait或waitpid截获子进程有关信息,是释放其占用资源,这样子进程资源一直占用着,直到父进程exit。