fork

fork:
一个进程,包括代码、数据和分配给进程的资源。fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,两个进程也可以做不同的事。
一个进程调用fork()函数后,系统先给新的进程分配资源,例如存储数据和代码的空间。然后把原来的进程的所有值都复制到新的新进程中,只有少数值与原来的进程的值不同。相当于克隆了一个自己。

fork特点:

调用一次,返回两次。●调用一次。返回两次。fork函数被父进程调用一次,但是却返回两次一 次是返回到父进程,一次是返回到新创建的子进程。
.并发执行。父进程和子进程是并发运行的独立进程。内核能够以任意方式交替执行它们的逻辑控制流中的指令。
**相同但是独立的地址空间。**父进程和子进程是独立的进程,它们对变量的任何改变都是独立的。

  • 共享文件。
    下面看一个典题:
    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>
    int main(int argc, char* argv[])
    {
    fork();
    fork() && fork() || fork();
    fork();
    printf(“hello\n”);
    }

运行结果1:

总共20个进程,除去main进程,还有19个进程。
为什么是还有19个进程。
第一个fork和最后一个fork肯定是会执行的。
主要在中间3个fork上,

注意&&和||运算符。
A&&B,如果A=0,就没有必要继续执行&&B了;A非0,就需要继续执行&&B。
A| |B,如果A非0,就没有必要继续执行||B了,A=0,就需要继续执行| |B。

父进程中fork返回1,子进程返回0.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值