linux 下的多進程編程 總結

這篇文章我慢慢的寫,可能需要1~2個禮拜

 

1,實現多進程的方法

 

在linux下,實現多進程編程主要依靠兩個方法

a,fork(),通過複製當前進程來建立新的進程,最基本的新建進程的操作,新建的進程爲調用進程的子進程,屬於同一個進程組

     fork創建子進程的時候,會返回兩個值,在父進程中返回子進程的標示,在子進程中返回0。因爲fork會把父進程拷貝一份,所以分別返回就不足爲奇了。

b,exec  exec是一系列方法,其實功能是一樣的,只是參數不一樣,方便使用。exec的方法通過用一個新的程序覆蓋原內存空間,來實現新的進程。

 

exec的方法包括以下幾種

 

 

int execl( const char *path, const char *arg, ...);

int execlp( const char *file, const char *arg, ...);

int execle( const char *path, const char *arg , ..., char* const envp[]);

int execv( const char *path, char *const argv[]);

int execvp( const char *file, char *const argv[]);

 

 

 

所以一般新建進程的方法就是:用fork創建子進程,子進程中用exec來加載程序覆蓋原內存空間,這樣,新的進程就建立了。

寫一個程序來驗證一下

 

執行就是 ls的效果,當然最後會加上this is the parent process這句話,這是在父進程中定義的。注意到父進程中wait句,只有當子進程執行結束後,wait纔會結束

 

2,進程間用管道通信

代碼 

 

管道之間的通信,如果在pipe()生成的管道中通信時,如果要用pipe管道替代標準輸入輸出,一定要在進程中關閉不必要的句柄,否則可能出現錯誤。例如下面這段程序需要在21行關閉管道輸出,否則在子進程中將管道輸出替代了標準輸出,就不能將信息輸出到標準輸出了

 

 

 

如果在21行不關閉

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章