首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

fork系统调用理解

系统调用fork()用于创建一个新进程。我们可以通过下面的代码来理解,最好是能自己敲一遍运行验证。

执行结果:

整段代码我们可以理解成三大步:

第一步:打印"hello world";

第二步:fork()一个新的进程;

第三步:判断rc的返回值并打印对应的信息;

1)当rc

2)当rc=0时,表示fork进入的是子进程;

3)当rc等于其他值时,表示fork进程成功,并将子进程的值赋值给rc。

从下面这张图可以很清晰的看到,父进程执行的步骤是123,子进程执行的步骤是23。其中父进程和子进程执行第三步的时候是没有先后顺序的,由CPU调度程序(scheduler)决定在某个哪个进程被执行。也就是上面的结果,后面两行每次打印的顺序结果可能是不一样的。

这里需要特别注意的是:

1、子进程不会从main()函数开始执行,而是直接从fork()系统调用返回,就好像是他自己调用了fork。

2、子进程并不是完全拷贝了父进程。虽然它拥有自己的地址空间(拥有自己的私有内存)、寄存器、程序计数器等,但是它从fork()返回的值是不一样的。父进程获得的返回值是新创建子进程的PID,而子进程获得的返回值是0。

运维工程师一枚,己亥猪年午时生人,工作第四个年头。

一路走来跌跌撞撞,吃了不少苦,走了不少弯路,心中一直有一个技术大牛梦。年少轻狂,刚来深圳之时,幻想着在这座城市拥有一套落地窗的大房子,每天晚上端着红酒杯在窗前俯瞰这热闹繁华的都市。现实终究是残酷的,此刻正在每个月都要省着水电的出租房端着保温杯敲命令。但我始终坚信:天道酬勤。在平凡中坚持前行,总有一天会遇见不一样的自己。

学习,总结,分享,交流,都能让我们进一步的提升自己。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20200313A0RGIB00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券