這篇文章我慢慢的寫,可能需要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行不關閉