一個進程,包括代碼、數據和分配給進程的資源。
fork ()函數通過系統調用創建一個與原來進程幾乎完全相同的進程,也就是兩個進程可以做完全相同的事,但如果初始參數或者傳入的變量不同,兩個進程也可以做不同的事。
一個進程調用 fork ()函數后,系統先給新的進程分配資源,例如存儲數據和代碼的空間。然后把原來的進程的所有值都復制到新的新進程中,只有少數值與原來的進程的值不同。相當于克隆了一個自己。

用戶數據一樣,進程 ID 不一致。
1.fork 函數的返回值
2. 子進程創建成功之后,子進程的執行位置
3. 父子進程的執行順序 不一定
4. 如何區分父子進程
2.getpid/getppid 函數
getpid: 得到當前進程的 PID
getppid: 得到當前進程的父進程的 PID
#include <sys/types.h>
#include <unistd.h>
#include<stdio.h>int main()
{pid_t pid;//定義fork()函數的返回類型pid_t
pid = fork();
if (pid>0)//返回值pid大于0,則為父進程
{
printf("this is father process %d",getpid());}
else if(pid==0)//返回值pid等于0,則為子進程
{printf("this is son process %d,father process is%d",getpid(),getppid());}
return 0;
}
父子進程間的數據共享
fork 之后兩個地址空間區數據完全相同
后續各自進行了不同的操作
父進程: num+400
子進程: num+200
物理地址: i, f_num,s_num
各個進程的地址空間中的數據是完全獨立的
對于同一個變量,讀時共享
寫的時候分別在物理地址上拷貝一份變量進行單獨讀寫
父子進程之間可不可以通過全局變量通信?
不能,兩個進程內存不能共享
#include <sys/types.h>
#include <unistd.h>
#include<stdio.h>
int i=200;
int main()
{pid_t pid;
pid = fork();
if (pid>0)
{
i+=400;
printf("this is father process %d\n",getpid());printf("i=%d\n",i);
}
else if(pid==0)
{
i+=200;
printf("this is son process %d,ppid is%d\n",getpid(),getppid());
printf("i=%d\n",i);
}for(int i=0;i<3;i++)
{printf("------i=%d\n",i);
}
return 0;
}