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

熱點內容
linux停止ping 瀏覽:606
解壓折紙玩具新聞 瀏覽:163
基於單片機的多路數據採集系統的設計 瀏覽:60
空調維修壓縮不啟動 瀏覽:125
伺服器如何裝ros 瀏覽:814
伺服器不用的硬碟怎麼處理 瀏覽:533
跑酷壓腿解壓視頻 瀏覽:170
linuxc結束線程結束 瀏覽:122
什麼可以對文件和文件夾進行管理 瀏覽:598
程序員提升技術的論壇 瀏覽:548
我在阿里雲上租的伺服器屬於什麼 瀏覽:252
360借條沒有app怎麼還款 瀏覽:676
安卓飲水機如何選 瀏覽:195
學編程中常用的英語單詞 瀏覽:133
游戲程序員上班 瀏覽:450
知到app上怎麼退出 瀏覽:7
我的伺服器為什麼登不進去 瀏覽:768
android簡訊攔截代碼 瀏覽:344
編譯原理etf 瀏覽:718
phpapi視頻教程 瀏覽:722