導航:首頁 > 操作系統 > 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線程相關的資料

熱點內容
手機怎麼連好輕app 瀏覽:397
真實賽車3安卓如何登錄 瀏覽:733
解壓壓縮包要誰的密碼 瀏覽:746
微信看漲跌源碼 瀏覽:70
android全局service 瀏覽:291
飛豬app關注怎麼取消 瀏覽:437
snmp4j源碼 瀏覽:247
如何利用肉雞搭建ftp伺服器 瀏覽:454
用戶名已加密怎麼辦 瀏覽:140
js怎麼樣上傳到文件到伺服器地址 瀏覽:581
省錢吖app裡面的錢怎麼套出來 瀏覽:596
ove轉pdf 瀏覽:309
八字油槽編程 瀏覽:247
遙望app怎麼重新注冊 瀏覽:410
石墨文檔導出到手機的哪個文件夾 瀏覽:506
scratch編程校本教材 瀏覽:97
如何把多個文件夾一起解壓 瀏覽:916
兒童編程免費教學20節課 瀏覽:124
java判斷時間格式 瀏覽:908
分析程序員招聘分析程序員 瀏覽:127