深度剖析fork()的原理及用法 – disdader

By sayhello 2018年3月21日

  人们都了解经过fork()体系调动人们可以到达一点钟和瞄准行动方向影象俱的新行动方向.人们通常将新行动方向称为子行动方向,这做事方法称为父行动方向。和子承继父的恩。,它包孕做事方法的周围的事物。,堆栈地址,内存资料处理把持块(PCB)等。

  1。亲子做事方法

  让人们先来谈谈父行动方向和

  • 父行动方向设置锁。,子行动方向不承继
  • 行动方向ID辨别
  • 转嫁子行动方向的未处理的警报。
  • 未解决的信号子行动方向集为空

  体系调动的周转

  经过man手册人们可以不紧张了解fork()收录的头文献

  

#include 
#include <
#include 
#include 
#include <string.h>
#include 
#include 
#include 

int main(void)
{
    pid_t pid ;
    signal(SIGCHLD,SIG_IGN);
    printf("before fork pid:%d\n",getpid());
    int abc = 10;      
    pid = fork();          if(PID == -1)   //不正确的隐现
    {
        perror("tile");
        return -1;
    }
    if(PID > 0)     父行动方向未填写的
    {
        abc++;
        printf("家长:PID:%d \n",getpid());
        printf("ABC:%d \n",ABC)
        sleep(20);
    }
    elseif(PID == 0){   子未填写的
        abc++;
        printf("孩子:%d,parent: %d\n",getpid(),getppid());
        printf("ABC:%d",ABC)
    }
    printf("fork 后。\n");
}before fork pid:27319parent:pid:27319 

before fork pid:27319parent:pid:27319
农行:11
before fork pid:27319child:27320,parent: 27319
农行:11fork 后。

  体系调动睬:

  经过从一边至另一边顺序人们可以了解:1)fork体系调动继,父行动方向和子行动方向的更迭器械,它们在辨别的未填写的。。

2)fork()有或起作用的一次调动隐现2次隐现,这稍许地抽象概念,很难拘押。,此刻,这两个做事方法在一点钟独立的未填写的中。,他们保持不变本人的东西。,不发生抵触,因而回到PID的2倍 ==0,一次pid大于0.而只要是先子行动方向蒸馏器父行动方向先器械,无详述的的规则。,它是随机的。

3)将fork()隐现值大于零设置为父行动方向,这是由于子行动方向的pid绝对轻易实施。,父行动方向子行动方向PID称为硬。,因而到处fork()体系调动空军将领子行动方向的pid音节有它本人隐现给父行动方向.

4)forl()的子器械做事方法在fork()继并找错误再开端,由于在fork()领先,父行动方向早已为子行动方向搭建好了运转周围的事物了.因而音节无效加密处开端.拘押了下面四点,依我看人们将会对这体系调动有更深的拘押。

  ()体系调动:

  这么讲期满fork(),人们也好和vfork()匹敌,而且竞争结尾一下vfork(.);vfork()在一些事件下,人们了解vfork()与fork()器械出来俱的,此外子行动方向会器械一次exec体系调动或许调动_exit(0)偿清.有或起作用雏形:pid_t vfork vfork(void),详细隐现值与进入fork()类似物. 这有或起作用时是在无实施写时委派预设下,因而现时人们绝不引荐应用vfork().

  • 裁决列举如下  1)vfork() 与父行动方向共享通知段

 2)vfork() 率先器械子行动方向。,父行动方向在行动方向完毕后器械。

  通常人们都具有器械功用。,在主顺序交换做事方法的影象。

发表评论

电子邮件地址不会被公开。 必填项已用*标注