demo程序是什么_你是否真的懂 [程序的运行顺序] 多进程 / 进程池

linux 如何运行一个程序

linux 在运行任何程序之时,都要调用 execve 系统调用函数,然后把你的程序和你给的参数以及环境参数扔给程序的入口函数。

入口函数

php【php 脚本依赖 php 解释器】解释器运行,源码就是 c【真是废话,谁不知道,用我来逼逼半天】入口函数就是 main【如 mysql,redis,php,nodejs,python,memcached,apache 等】

0bc085e8e4e6bff10ebe16566f55f13c.png

该程序的代码,数据容量

2d501ccec7940e1965a14f770d8c2f8a.png

测试源码

不管什么语言的源码【不必在意语言】,道理都一样的

class demo
{
public:
        demo(int age,char *name):m_age(age),m_name(name){}
        void run();
        void child();
        void parent();
public:
        int m_age;
        char *m_name;
        pid_t pid;
        int num[3];
};

void demo::child()
{
        printf("child run %d==%d=%dn",getpid(),pid,m_age);
        while(1){
                sleep(1);
                printf("child run %d=%d=%dn",getpid(),pid,m_age);
                printf("我要访问demo类成员的数据n");
                printf("demo::m_name=%sn",m_name);
                printf("demo::m_age=%dn",m_age);
                printf("demo::pid=%dn",pid);
                for(int i=0;i<3;i++){
                        printf("demo::num[%d]=%dn",i,num[i]);
                }
        }

}

void demo::parent()
{
        printf("parent run %d=%d=%dn",getpid(),pid,m_age);
        while(1){
                sleep(1);
                printf("parent run %d=%d=%dn",getpid(),pid,m_age);
                printf("我要访问demo类成员的数据n");
                printf("demo::m_name=%sn",this->m_name);
                printf("demo::m_age=%dn",this->m_age);
                printf("demo::pid=%dn",this->pid);
                for(int i=0;i<3;i++){
                        printf("demo::num[%d]=%dn",this->num[i]);
                }
        }
}
void demo::run()
{
        cout<<"main process "<<getpid()<<" start"<<endl;
        m_age=0;
        for(int i=0;i<3;i++){
                num[i] = i;//父进程可访问全部的值  123
                pid = fork();//复制之时,子进程是得不到pid的内容的,而父亲运行时是返回它自己  所以一直不变
                if(pid>0){
                        continue;
                }
                else if(pid==0){
                        m_age=i+1;
                        break;
                }
        }


}
int main()
{
        demo *obj = new demo(100,(char*)"jack");
        obj->run();
        if(obj->m_age){
                obj->child();
        }else{
                obj->parent();
        }
        return 0;
}

运行图解

64a42e06fcc11053d4b7c8d1d5629ffd.png

多进程父子进程间的代码和数据在内存空间的图

只能截个大概

1cb634e817f7275bdab309fec2427322.png

0f540db2bd9d64085530c011e2dd9525.png

https://learnku.com/articles/45110

更多PHP内容请访问:

八重樱:腾讯T3-T4标准精品PHP架构师教程目录大全,只要你看完保证薪资上升一个台阶(持续更新)​zhuanlan.zhihu.com
065903e703d505b9d31dba34c69f84f5.png

以上内容希望帮助到大家,很多PHPer在进阶的时候总会遇到一些问题和瓶颈,业务代码写多了没有方向感,不知道该从那里入手去提升,对此我整理了一些资料,包括但不限于:分布式架构、高可扩展、高性能、高并发、服务器性能调优、TP6,laravel,YII2,Redis,Swoole、Swoft、Kafka、Mysql优化、shell脚本、Docker、微服务、Nginx等多个知识点高级进阶干货需要的可以免费分享给大家,需要的可以加入我的官方群点击此处。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值