導航:首頁 > 操作系統 > linuxfork線程

linuxfork線程

發布時間:2024-12-25 13:52:29

Ⅰ 如何去理解linux中進程,線程等概念

對於linux來說,則沒有很明確的進程、線程概念。首先linux只有進程而沒有線程,然而它的進程又可以表現得像windows下的線程。linux利用fork()和exec函數族來操作多線程。fork()函數可以在進程執行的任何階段被調用,一旦調用,當前進程就被分叉成兩個進程——父進程和子進程,兩者擁有相同的代碼段和暫時相同的數據段(雖然暫時相同,但從分叉開的時刻就是邏輯上的兩個數據段了,之所以說是邏輯上的,是因為這里是「寫時復制」機制,也就是,除非萬不得已有一個進程對數據段進行了寫操作,否則系統不去復制數據段,這樣達到了負擔最小),兩者的區別在於fork()函數返回值,對於子進程來說返回為0,對於父進程來說返回的是子進程id,因此可以通過if(fork()==0)…else…來讓父子進程執行不同的代碼段,從而實現「分叉」。
exec函數族的函數的作用則是啟動另一個程序的新進程,然後完全用那個進程來代替自己(代碼段被替換,數據段和堆棧被廢棄,只保留原有進程id)。這樣,如果在fork()之後,在子進程代碼段里用exec啟動另一個進程,就相當於windows下的CreateThread()的用處了,所以說linux下的進程可以表現得像windows下的線程。
然而linux下的進程不能像windows下線程那樣方便地通信,因為他們沒有共享數據段、地址空間等。它們之間的通信是通過所謂IPC(InterProcess Communication)來進行的。具體有管道(無名管道用於父子進程間通信,命名管道可以用於任意兩個進程間的通信)、共享內存(一個進程向系統申請一塊可以被共享的內存,其它進程通過標識符取得這塊內存,並將其連接到自己的地址空間中,效果上類似於windows下的多線程間的共享數據段),信號量,套接字。
標簽: 進程, 線程

閱讀全文

與linuxfork線程相關的資料

熱點內容
做設計做程序員適合的電腦 瀏覽:778
網站有源碼和沒有源碼的區別 瀏覽:678
如何自學開發app 瀏覽:593
修電梯pdf 瀏覽:349
政務雲是不是提供虛擬伺服器 瀏覽:57
在哪裡看每個app用了多長時間 瀏覽:635
學程序員要英語四級嗎 瀏覽:131
java視頻錄制 瀏覽:756
口頭指派式命令 瀏覽:470
php開發工程師面試題 瀏覽:954
linux內核源碼pdf 瀏覽:66
mc命令方塊怎麼提取 瀏覽:367
有關程序員的五大魔咒你中了幾個 瀏覽:204
本地文件如何上傳linux伺服器 瀏覽:17
傳奇資源網站源碼 瀏覽:377
f26app怎麼下載 瀏覽:120
程序員與酒 瀏覽:439
php政府網站源碼 瀏覽:912
前端面試常問演算法 瀏覽:153
pythonopen可以打開文件夾嗎 瀏覽:635