冯诺依曼体系结构

操作系统(Operator System)

进程控制块(PCB)
struct task_struct{
    //该进程的所有属性
    //该进程对应的代码和属性地址
    struct task_struct* next;
}; 
struct task_struct 内核结构体——>创建内核结构体对象(task_struct)--->将对象和数据关联起来。
进程=内核数据结构(task_struct)+ 进程对应的磁盘代码

 while(true)
    {
        cout<<"son:pid: "<<getpid()<<"    parent: "<<getppid()<<endl;
        sleep(1);
    } 
son:pid: 6221    parent: 5912
 son:pid: 6221    parent: 5912
 son:pid: 6221    parent: 5912
son:pid: 6166parent: 5912
 son:pid: 6166parent: 5912
多次运行父进程ppid不变。

命令行上启动的进程,一般父进程没有特殊情况的话,都是bash!!!
./"proc"
 A proc, pid : 4018,ppid : 3997,id : 4019
 A proc, pid : 4019,ppid : 4018,id : 0

fork
通过fork可以子进程。
 pid_t id=fork();
    printf("A proc, pid : %d,ppid : %d,id : %d\n",getpid(),getppid(),id);
    sleep(2); 
pid_t id=fork();
    //printf("A proc, pid : %d,ppid : %d,id : %d\n",getpid(),getppid(),id);
    if(id==0)
    {
        while(1)
        {
            printf("Son proc, pid : %d,ppid : %d,id : %d\n",getpid(),getppid(),id);
            sleep(1);
        }
    }
    else if(id>0)
    {
        while(1)
        {
            printf("Par proc, pid : %d,ppid : %d,id : %d\n",getpid(),getppid(),id);
            sleep(1);
        }
    }
    else
    {
    } 
Par proc, pid : 6856,ppid : 5912,id : 6857
 Son proc, pid : 6857,ppid : 6856,id : 0
 Par proc, pid : 6856,ppid : 5912,id : 6857
 Son proc, pid : 6857,ppid : 6856,id : 0
 Par proc, pid : 6856,ppid : 5912,id : 6857
 Son proc, pid : 6857,ppid : 6856,id : 0
总结
fork()之后,会有父进程和子进程两个进程执行后续代码
fork后续的代码,被父子进程共享
通过返回值不同,让父子进程执行后续共享代码的一部分。



















