1. 程式人生 > >Unix-Linux 程式設計實踐教程 第八章 小結

Unix-Linux 程式設計實踐教程 第八章 小結

  • 執行程式的函式---execvp()                                              
                                                                                             execvp中的argv是一個指標陣列(陣列元素為指標),最後一個指標需為NULL;execvp將在環境變數PATH中尋找file。execvp是先擦除當前程序空間的資料,然後再將目標程式程式碼從磁碟上載入到當前程序空間
  • 複製當前程式到新的程序空間---fork()。程序呼叫fork(),轉到核心,核心進行以下操作:
    1. 分配新的記憶體塊和核心資料結構
    2. 複製原來的程序到新的程序
    3. 向執行程序集新增新的程序
    4. 將控制權返回給兩個程序(在父程序中,fork()返回值不為0,在子程序中fork()返回值為0) 
  • 等待子程序結束函式---wait()。wait()實際上時阻塞地等待SIGCHILD訊號,如果設定了SIGCHILD處理函式,那麼會先執行處理函式,再wait()返回。      
  • exit()->呼叫由atexit()或on_exit()註冊的函式->_exit()。
  • _exit()流程:
    1. 關閉所有檔案描述符和目錄描述符
    2. 將該程序的PID設定為init程序的PID
    3. 如果父程序呼叫wait,即通知父程序
    4. 向父程序傳送SIGCHILD
  • 已經死亡卻沒有給exi()沒有賦值的程序叫做殭屍(zombie)程序