1. 函數原型:pid_t fork(void)
功能:完整地拷貝父進程的整個地址空間。
課本例子:
該程序 使用fork 函數新建了一個子進程,其中父進程返回子進程的PID,而子進程返回值爲0;
注意點:
1.程序執行的時候,執行 fork 之後 父進程的 result 返回值應該爲 子進程的PID,子進程返回0,可以用返回值判斷當前是哪個進程。
2.子進程是複製了父進程的所有內容,除了PID,因此在父進程中的變量改變了,子進程中並不會有改變。例子如下:
結果可想而知輸出結果:
The value is 10
The value is 10
3. 和 vfork 不同的是,vfork 函數通過允許父子進程可訪問相同物理內存,當子進程需要改變內存中數據時才拷貝父進程 (寫操作時拷貝)
2. 函數原型:int execl(const char, const char *arg,....)
int execv(const char, char * const arg[],....)
...........
功能:進程執行另個程序調用的函數
例子:
注意點:
1. exec 函數族 不能直接執行管道命令,那麼如何使用exec 執行管道命令呢?
課後作業:
1.創建3個進程,其中一個爲父進程,其餘兩個是該父進程創建的子進程,其中一個進程運行一條Linux指令(該指令 要帶管道命
令 如 : ls -l | more),該條指令自定;另一個子進程在打印一條提示信息並暫停3秒後退出。要求創建新進程後要進行出錯
處理。
解答:請看 第一課習題之我的解決方案。