进程复制fork()
产生进程的方式比较多,fork()是其中的一种方式。fork()函数以父进程为蓝本复制一个进程,其ID号和父进程ID号不同。在Linux环境下,fork()是以写复制实现的,只有内存等与父进程不同,其他与父进程共享,只有在父进程或者子进程进行修改后,才重新生成一份。
1.fork函数介绍
原型如下,当成功后,返回值是进程的ID,失败返回-1
#include<sys/tyoes.h>
#include<ubistd.h>
pid_t fork(void);
fork()的特点是执行一次,返回两次。在父进程和子进程中返回的是不同的值,父进程返回的是子进程的ID号,而子进程中则返回0;
2.fork()函数的例子
1 #include<stdio.h>
2 #include<stdlib.h>
3 #include<stdio.h>
4 #include<unistd.h>
5 #include<sys/types.h>
6 int main(void)
7 {
8 pid_t pid;
9
10 pid = fork();
11
12 if(pid == -1)
13 {
14 printf("进程创建失败!\n");
15 return -1;
16 }
17 else if(pid == 0)
18 {
19 printf("子进程,fork返回值:%d,ID:%d,父进程ID:%d\n ",pid,getpid(),getppid());
20 }
21 else
23 printf("父进程,fork返回值:%d,ID:%d,父进程ID:%d\n ",pid,getpid(),getppid());
24 }
25
26 return 0;
27 }
fork出来的子进程的父进程ID号是为执行fork()函数的进程的ID号。