導航:首頁 > 文件類型 > linuxfork文件

linuxfork文件

發布時間:2023-03-12 11:31:18

linux fork 會共享哪些東西

fork()不僅創建出與父進程代碼相同的子進程,而且父進程在fork執行點的所有上下文場景也被自動復制到子進程中,包括:
—全局和局部變數
—打開的文件句柄
—共享內存、消息等同步對象
由於pipe調用相當於創建了2個文件句柄,因此在fork後這兩個句柄也被自動復制到子進程中,對這兩個句柄的操作效果與在主進程中的操作效果是一致的,這就使父子進程之間很容易通過該機制實現數據交換,如:
假設pipe產生的句柄為P[0],P[1],在fork後父子進程都擁有了P[0],P[1]句柄,那麼:
—父進程可向自己的P[1]中寫入數據,子進程從P[0]中即可讀出該數據;切記此時父進程不能也從P[0]讀數據,否則自己寫入的數據可能先被自己讀走了
—反之亦然,子進程向P[1]中寫入數據後,父進程從P[0]中可讀出該數據;切記此時子進程不要從P[0]讀走數據
你可能難以理解為什麼進程內部的數據讀寫會被傳遞到另一個進程,但別忘了,pipe匿名管道和文件,socket等一樣是屬於操作系統的管理對象,對其進行讀寫都是由OS的內核代碼來進行控制的。在父進程調用pipe創建出管道後,該管道對象是存儲在OS內部的,父進程得到的P[0]和P[1]都只是對該對象的引用(相當於指針);在fork出子進程後,子進程復制出的也只是同一個指針,所指向的還是OS中的同一個對象,這就是為什麼父子進程能通過其進行互相通信的原因。

❷ 純小白,請Linux怎麼調用fork()創建兩個子進程並運行

是的,需要在cpp裡面調用fork,然後再執行exec。
下面是個例子:

pid_t pid = fork();
if (pid < 0) {
return;
}
else if (pid == 0) {
printf("child process!回!!!\n");
char *argv[] = { (char *)"tst_app", (char *)"xx", NULL };
execv("/usr/bin/tst_app", argv);
}
請采答納,謝謝

❸ LINUX中fork.c文件作用

樓上的(回答者: 497820833 - 助理 二級 2009-7-10 17:20),

你添加了一個else,只是在fork發生異常時不需要再做後面兩個分回支的判斷答了,可以說意義不大,因為沒有else一樣能夠實現同樣的效果。

閱讀全文

與linuxfork文件相關的資料

熱點內容
win10如何查找本機文件在哪裡設置密碼 瀏覽:124
視頻放到ps3哪個文件夾 瀏覽:389
一列有多少項數據 瀏覽:483
蘋果5英版卡貼怎麼調 瀏覽:742
網路快的城市有哪些 瀏覽:481
刻錄時源文件名與文件名 瀏覽:239
安卓app遠程下發配置文件 瀏覽:898
如何編程qq收到信息 瀏覽:959
飛思卡爾智能車程序分為幾個模塊 瀏覽:960
怎麼深入了解編程語言 瀏覽:942
win10editionbeta 瀏覽:812
蘋果手機常用軟體大全 瀏覽:172
蘋果7晶元型號8010 瀏覽:1
怎麼解壓視頻文件 瀏覽:631
華為共享網路如何設置密碼 瀏覽:272
粉碎文件刪除磁碟空間什麼意思 瀏覽:683
js創建div設置屬性 瀏覽:81
甜甜圈app怎麼樣 瀏覽:757
mc伺服器載入配置文件指令 瀏覽:716
gpsnvmbin是什麼文件 瀏覽:161

友情鏈接