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)進程
相關文章
相關標籤/搜索