linux 如何运行一个程序
linux 在运行任何程序之时,都要调用 execve 系统调用函数,然后把你的程序和你给的参数以及环境参数扔给程序的入口函数。
入口函数
php【php 脚本依赖 php 解释器】解释器运行,源码就是 c【真是废话,谁不知道,用我来逼逼半天】入口函数就是 main【如 mysql,redis,php,nodejs,python,memcached,apache 等】
图
![0bc085e8e4e6bff10ebe16566f55f13c.png](https://i-blog.csdnimg.cn/blog_migrate/d557c1c0d71fb37f795649df92066daf.jpeg)
该程序的代码,数据容量
![2d501ccec7940e1965a14f770d8c2f8a.png](https://i-blog.csdnimg.cn/blog_migrate/88e3212db61d0c7ee0545ef122493704.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](https://i-blog.csdnimg.cn/blog_migrate/4d535de4b7f2d9a75ff66a52110bb530.jpeg)
多进程父子进程间的代码和数据在内存空间的图
只能截个大概
![1cb634e817f7275bdab309fec2427322.png](https://i-blog.csdnimg.cn/blog_migrate/2634446580d5ebb57a4d147d11064fa8.jpeg)
![0f540db2bd9d64085530c011e2dd9525.png](https://i-blog.csdnimg.cn/blog_migrate/ee41ad24ba6fc6394e37f8214109de03.jpeg)
https://learnku.com/articles/45110
更多PHP内容请访问:
八重樱:腾讯T3-T4标准精品PHP架构师教程目录大全,只要你看完保证薪资上升一个台阶(持续更新)zhuanlan.zhihu.com![065903e703d505b9d31dba34c69f84f5.png](https://i-blog.csdnimg.cn/blog_migrate/666ce387346174a8988701eeaf0651ad.png)
以上内容希望帮助到大家,很多PHPer在进阶的时候总会遇到一些问题和瓶颈,业务代码写多了没有方向感,不知道该从那里入手去提升,对此我整理了一些资料,包括但不限于:分布式架构、高可扩展、高性能、高并发、服务器性能调优、TP6,laravel,YII2,Redis,Swoole、Swoft、Kafka、Mysql优化、shell脚本、Docker、微服务、Nginx等多个知识点高级进阶干货需要的可以免费分享给大家,需要的可以加入我的官方群点击此处。