自学内容网 自学内容网

Linux中的进程入门

冯诺依曼体系结构

操作系统(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后续的代码,被父子进程共享

通过返回值不同,让父子进程执行后续共享代码的一部分。


原文地址:https://blog.csdn.net/2301_77479435/article/details/142367536

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!