全局變量是靜態變量,在整個程序的生命周期都存在,那么多進程能否通過全局變量(即靜態變量)進行通信?
答案是不可以
首先我們先回顧子進程的誕生和其運行原理。
父進程通過fork來復制出一個子進程的副本,根據原理,子進程擁有父進程的一份完整數據拷貝。
同時由於fork時按頁復制數據太耗時,於是子進程在剛被fork出來的時候,讀取的其實是父進程中的內存數據(所以,這時候也可以說靜態變量是共享的)
但是, 當父子進程中的一方對靜態變量(其實不只是靜態變量,任何內存中的東西都是這樣)進行寫入操作時,就會觸發寫時復制機制,這個變量將在子進程中產生一個新的空間來存放,於是變量不再共享。
所以,父進程和子進程中的變量是不可以被共享的,在程序員和進程的角度來看,每個進程的內存空間都是屬於它自己的。
