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

熱點內容
程序員越來越困 瀏覽:865
女朋友java程序員 瀏覽:338
魔獸世界加密貨幣 瀏覽:783
程序員打卡日記 瀏覽:766
車間壓縮空氣有水怎麼處理 瀏覽:835
java類調用php 瀏覽:475
php時間控制 瀏覽:807
用流程圖表示演算法分類 瀏覽:931
本地git文件夾誤刪除怎麼恢復 瀏覽:747
java快速開發平台開源 瀏覽:996
java實戰從入門 瀏覽:155
javahello程序 瀏覽:13
java系統輸出 瀏覽:934
430單片機存儲 瀏覽:396
私人雲php源碼 瀏覽:449
解壓系統內核 瀏覽:801
java精確兩位小數 瀏覽:839
安卓系統如何看游戲幀數 瀏覽:435
生產節拍模擬app哪個好用 瀏覽:437
光遇安卓渠道怎麼轉 瀏覽:421