一个进程,包括代码、数据和分配给进程的资源。fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,
也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,两个进程也可以做不同的事。fork()函数用于从已存在进程中创建一个新进程。新进程称为子进程,而原进程称为父进程。你可以通过检查fork()函数的返回值知道哪个是父进程,哪个是子进程。父进程得到的返回值是子进程的进程号,而子进程则返回0。
比如以下例题,问fork生成几个进程。
#include <stdio.h>
int main()
{
fork();
fork() && fork() || fork();
fork();
sleep(100);
return 0;
}
fork() && fork() || fork()创建了19个新进程
第一注释行的fork生成1个新进程
第二注释行的三个fork生成4+4=8个新进程
第三注释行的ork会生成10个新进程(前面总共有10个进程,调用一次fork生成10个新进程)
所以一共会生成1+8+10=19个新进程
再看看另一个例子:
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
int a = 10;
int main(int argc, char *argv[])
{
int b = 20;
pid_t pid;
pid = fork();
if( pid < 0 ){
perror(“fork”);
}
if(0 == pid){
a = 111;
b = 222;
printf(“son: a = %d, b = %d\n”, a, b);
}else if(pid > 0){
sleep(1);
printf(“father: a = %d, b = %d\n”, a, b);
}
return 0;
}
输出子进程a=111,b=222;
父进程a=10,b=20;
能知道在子进程修改变量 a,b 的值,并不影响到父进程 a,b 的值
相关文章: