- fork函数返回值:
①调用成功返回两个数,一个等于0(代表当前是子进程);一个大于0,并且刚好等于子进程的pid号(代表当前是父进程)。
②调用失败返回-1; - fork函数调用以后子进程会拷贝一份父进程的代码,这些进程不共享,fork之后,子进程进行了写时拷贝(Copy-On-Write)技术,如果父子进程中的任意一个试图修改这些区域,则内核只为修改区域的那块内存制作一个副本。
- 父子进程之间谁先执行后执行由进程的调度决定
#include<stdio.h>
#include <sys/types.h>
#include <unistd.h>
int main()
{
pid_t pid;
pid_t pidfork;
pid=getpid();
int data=10;
pidfork=fork();
if(pidfork>0){
printf("this is father proceeding,pidfork=%d\n",pidfork);
}
else if(pidfork==0){
printf("this is child proceeding,pidfork=%d,childpid=%d\n",pidfork,getpid());
data+=10;
}
printf("data=%d\n",data);
return 0;
- fork函数仿照网络中服务器接收客户端实例代码
#include<stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include<stdlib.h>
int main()
{
int data;
while(1){
printf("input your data:\n");
scanf("%d",&data);
if(data==1){
pid_t pidfork=fork();
if(pidfork==0){
while(1){
printf("do net getpid=%d\n",getpid());
sleep(3);
}
}
}else
{
printf("No\n");
}
}
return 0;
}
- 进程创建发生了什么事
在早期linux环境fork以后进程会进行一个全拷贝,也就是子进程会把全部父进程的东西拷贝一份,然后子进程在上面运行;现在Linux环境在fork以后进行的是写时拷贝(在需要修改时才拷贝,不修改则运用原来的代码)
- fork创建一个子进程的一般目的
- 一个父进程希望复制自己,使父、子进程同时执行不同的代码段。这在网络服务进程中是常见的—父进程等待客户端的服务请求。当这种请求到达时,父进程调用fork,使子进程处理此请求。父进程则继续等待下一个服务请求到达。
fork函数用于创建子进程,成功返回时,父进程得到子进程的PID,子进程得到0。子进程继承父进程的代码并使用写时拷贝技术,只有在修改时才会复制内存。在早期Linux中是全拷贝,现在采用更高效的写时拷贝。常用于网络服务,父进程复制自身处理客户端请求。
1211

被折叠的 条评论
为什么被折叠?



