版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、Linux多進程編程,主要內容,LINUX進程介紹,什么是進程 簡單地說就是允許起來的程序,即應用程序的運行實例。進程這個概念是針對系統(tǒng)而不是針對用戶的,對用戶來說,他面對的概念是程序。當用戶敲入命令執(zhí)行一個程序的時候,對系統(tǒng)而言,它將啟動一個進程。但和程序不同的是,在這個進程中,系統(tǒng)可能需要再啟動一個或多個進程來完成獨立的多個任務。,LINUX進程介紹,進程ID 唯一標識進程的非負整形變量,pid。 init進程 內核自舉啟動后運行的第一個進程,/etc/inittab是它啟動的配置文件,所有的孤兒進程的父進程為init。,LINUX進程介紹,進程的結構 Linux下一個進程在內存里有三部分
2、的數據,就是代碼段、堆棧段和數據段。其實學過匯編語言的人一定知道,一般的CPU都有上述三種段寄存器,以方便操作系統(tǒng)的運行。這三個部分也是構成一個完整的執(zhí)行序列的必要的部分。,LINUX進程介紹,進程的結構 代碼段,顧名思義,就是存放了程序代碼的數據,假如機器中有數個進程運行相同的一個程序,那么它們就可以使用相同的代碼段。堆棧段存放的就是子程序的返回地址、子程序的參數以及程序的局部變量。 系統(tǒng)如果同時運行數個相同的程序,它們之間就不能使用同一個堆棧段和數據段。,LINUX進程介紹,進程的優(yōu)點 對不同進程來說,它們具有獨立的數據空間、代碼空間和堆??臻g。因此,相比于線程而言,進程有更好的健壯性。,
3、LINUX進程介紹,進程帶來的問題 由于不共享數據段,進程相比于線程而言,各個進程間的通訊比較麻煩。必須依靠信號量、管道、共享內存和socket等方式進行通訊。并且,進程的開銷也遠遠大于線程。,LINUX多進程編程,fork fork函數是Unix系統(tǒng)最杰出的成就之一,它是七十年代UNIX早期的開發(fā)者經過長期在理論和實踐上的艱苦探索后取得的成果,一方面,它使操作系統(tǒng)在進程管理上付出了最小的代價,另一方面,又為程序員提供了一個簡潔明了的多進程方法。,LINUX多進程編程,Linux下的fork 這個函數名是英文中“分叉”的意思。為什么取這個名字呢?因為一個進程在運行中,如果使用了fork,就產生
4、了另一個進程,于是進程就“分叉”了,所以這個名字取得很形象。它的返回值為:如果在父進程中返回子進程的pid,如果是在子進程中則返回0。,LINUX多進程編程,Linux下的fork 當fork函數執(zhí)行完畢后,內核并不會馬上復制父進程的堆、棧和數據段到子進程,而是采用COW技術,使兩者的這些內容變?yōu)橹蛔x共享,一旦其中一個進程內改變了某頁內容,那么就進行復制該頁。,Linux多進程編程,fork創(chuàng)建子進程 getpid獲取進程pid getuid、geteuid、setuid、setreuid、setfsuid getgid、getegid、setgid、setregid、getfsgid,LIN
5、UX多進程編程,void main(int ac, char *av) int i; if ( fork() = 0 ) /* 子進程程序 */ for ( i = 1; i 1000; i + ) printf(This is child process ); else /* 父進程程序*/ for ( i = 1; i 1000; i + ) printf(This is process process ); ,LINUX多進程編程,void main() for(;) fork(); 可以預先給每個用戶設置可運行的最大進程數,這樣,只要不是root,任何能運行的進程數也許不足系統(tǒng)總的能運
6、行和進程數的十分之一,這樣,就能對付上述惡意的程序了。,LINUX多進程編程,int main(int ac, char *av) int GID = 100, UID = 100; if (-1=setfsgid(GID) return -2; if (-1=setgid(GID) return -3; if (-1=setregid(GID,GID) return -4; if (-1=setfsuid(UID) return -5; if (-1=setuid(UID) return -6; if (-1=setreuid(UID,UID) return -7; return 0; ,L
7、INUX多進程通訊,信號本質 信號是在軟件層次上對中斷機制的一種模擬,在原理上,一個進程收到一個信號與處理器收到一個中斷請求可以說是一樣的。信號是異步的,一個進程不必通過任何操作來等待信號的到達,事實上,進程也不知道信號到底什么時候到達。 信號是進程間通信機制中唯一的異步通信機制,可以看作是異步通知,通知接收信號的進程有哪些事情發(fā)生了。信號機制經過POSIX實時擴展后,功能更加強大,除了基本通知功能外,還可以傳遞附加信息。但這里意義不是很大,往往需要數據的交換我們使用的是進程間其他通訊方法。,LINUX多進程通訊,信號安裝 #include typedef void (*sighandler_
8、t)(int); sighandler_t signal(int signum, sighandler_t handler); The signal() function returns the previous value of the signal handler, or SIG_ERR on error. 信號發(fā)送 #include #include int kill(pid_t pid, int sig);,LINUX多進程通訊,#include #include #include void signal_op(int sig) printf(“recv signal : %dn”,
9、sig); int main(int argc,char*argv) signal(SIGUSR1+30, signal_op); for (; ;) sleep(1000); ,LINUX多進程通訊,#include #include #include int main(int argc,char*argv) kill(atoi(argv1), SIGUSR1+30); return 0; ,LINUX多進程通訊,用管道通訊 管道技術是Linux操作系統(tǒng)中歷來已久的一種進程間通信機制。所有的管道技術,無論是半雙工的匿名管道,還是命名管道,它們都是利用FIFO排隊模型來指揮進程間的通信。對于管道,我們可以形象地把它們當作是連接兩個實體的一個單向連接器。例如,請看下面的命令: ls l | wc l 自己在寫程序時也可以采用一個進程用O_APPEND打開文件寫入,另外一個用O_RDONLY讀出。,LINUX多進程通訊,用管道通訊 管道管道技術只能用于連接具有共同祖先的進程,例如父子進程間的通信,它無法實現不同用戶的進程間的信息共享。再者,管道不能常設,當訪問管道的進程終止時,管道也就撤銷。這些限制給它的使用帶來不少限制,但是命名管道卻克服了這些限制。 命名管道也稱為FIFO,是一種永久性的機構。FIFO文件也具有文件名、文件長度、訪問許可權等屬性,它也能像其它Linux文件那
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 施工現場外包單位安全檢查方案
- 熱力設施檢測認證方案
- 物料損耗控制與預防措施方案
- 滅火演練活動方案
- 高空作業(yè)安全監(jiān)測實施方案
- 施工現場急救技能培訓方案
- 制造企業(yè)庫存管理及成本控制方案
- 企業(yè)大數據日志分析與監(jiān)控方案
- 2025年社區(qū)工作者職業(yè)資格考試真題模擬與押題卷及詳解及答案
- 醫(yī)院人文關懷服務體系建設方案
- 消防工程施工資料管理與規(guī)范
- 《2025年CSCO非小細胞癌診療指南》解讀
- 在線網課學習課堂《人工智能(北理 )》單元測試考核答案
- 摩托車新車寄售協議書范文范本
- DL∕T 1724-2017 電能質量評估技術導則 電壓波動和閃變
- 民警職級晉升工作總結范文三篇
- 銀齡計劃教師總結
- (高清版)DZT 0351-2020 野外地質工作后勤保障要求
- 港珠澳大橋工程管理創(chuàng)新與實踐
- 化妝培訓行業(yè)分析
- 孩子如何正確與師長相處與溝通
評論
0/150
提交評論