linux 如何運行一個程序
linux 在運行任何程序之時,都要調用 execve 系統調用函數,然後把你的程序和你給的參數以及環境參數扔給程序的入口函數。
入口函數
php【php 腳本依賴 php 解釋器】解釋器運行,源碼就是 c【真是廢話,誰不知道,用我來逼逼半天】入口函數就是 main【如 mysql,redis,php,nodejs,python,memcached,apache 等】
圖
該程序的代碼,數據容量
測試源碼
不管什麼語言的源碼【不必在意語言】,道理都一樣的
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=%d\n",getpid(),pid,m_age);
while(1){
sleep(1);
printf("child run %d=%d=%d\n",getpid(),pid,m_age);
printf("我要訪問demo類成員的數據\n");
printf("demo::m_name=%s\n",m_name);
printf("demo::m_age=%d\n",m_age);
printf("demo::pid=%d\n",pid);
for(int i=0;i<3;i++){
printf("demo::num[%d]=%d\n",i,num[i]);
}
}
}
void demo::parent()
{
printf("parent run %d=%d=%d\n",getpid(),pid,m_age);
while(1){
sleep(1);
printf("parent run %d=%d=%d\n",getpid(),pid,m_age);
printf("我要訪問demo類成員的數據\n");
printf("demo::m_name=%s\n",this->m_name);
printf("demo::m_age=%d\n",this->m_age);
printf("demo::pid=%d\n",this->pid);
for(int i=0;i<3;i++){
printf("demo::num[%d]=%d\n",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;
}
運行圖解
多進程父子進程間的代碼和數據在內存空間的圖
只能截個大概
更多PHP內容請訪問:
騰訊T3-T4標準精品PHP架構師教程目錄大全,只要你看完保證薪資上升一個臺階(持續更新)