第一課關於 fork 和 exec 函數的學習

  

    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秒後退出。要求創建新進程後要進行出錯

                 處理。

       

        解答:請看 第一課習題之我的解決方案。

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