linux 多進程編程 大致總結__區塊鏈

來源:互聯網
上載者:User

http://blog.csdn.net/zs634134578/article/details/20475741


問題聚焦:     進程是Linux作業系統環境的基礎。     本篇討論以下幾個內容,同時也是面試經常被問到的一些問題:     1 複製進程映像的fork系統調用和替換進程映像的exec系列系統調用     2 殭屍進程     3 處理序間通訊的方式之一:管道     4 3種System V進程通訊方式:訊號量,訊息佇列和共用記憶體

fork系統調用 定義: [cpp]  view plain copy #include <sys/types.h>   #include <unistd.h>   pid_t fork( void );   函數說明: 該函數每次調用返回兩次 在父進程中返回的是子進程的PID,在子進程中返回的是0,由此判斷當前進程是父進程還是子進程(傳回值是0的為子進程) 作用: fork函數複製當前進程 子進程的代碼和父進程完全相同 子進程複製父進程的大部分資料(堆資料,棧資料,待用資料) 寫時複製 父進程中開啟的檔案描述符等在子進程中預設開啟,因此它們的引用變數均+1.
Exec系列系統調用(6個) 在子進程中執行其他程式,即替換當前進程映像,需要使用exec系列函數 定義: [cpp]  view plain copy #include <unistd.h>   extern char** environ;      int execl( const char* path, const char* arg, ... );   int execlp( const char* file, const char* arg, ... );   int execle( cost char* path, const char* arg, ... , char* const envp[] );   int execv( const char* path, char* const argv[] );   int execvp( const char* file, char* const argv[] );   int execve( const char* path, char* const envp[] );   參數說明: path:指定可執行檔的完整路徑 file:接受檔案名稱,該檔案的具體位置則在環境變數PATH中搜尋 arg:接收可變參數 argv:接收參數數組,它們都會被傳遞給新程式的main函數 envp:用於設定新程式的環境變數,如果未設定,則新程式使用由全域變數environ指定的環境變數
返回: 成功時,不返回;出錯,返回-1,並設定errno 如果沒出錯,則來源程式中exec調用之後的代碼都不會執行,因為此時來源程式已經被exec的參數指定的程式完全替換(包括代碼和資料)
exec函數不會關閉原程式開啟的檔案描述符,除非該檔案描述符被設定了類型SOCK_CLOEXEC的屬性。

殭屍進程 殭屍進程:兩種情況導致子進程導致殭屍態 如果父進程需要查詢子進程的退出狀態,那麼子進程結束後,核心不會立即釋放該進程的進程表表項,以滿足父進程後續對該子進程退出資訊的查詢。在子進程結束之後,父進程讀取其退出狀態之前,該子進程處於殭屍態。 如果父進程退出或異常終止,而子進程繼續運行,此時子進程的PPID(父進程PID)被設定成1,即init進程,即init進程接管了該進程,並等待它結束。在父進程退出之後,子進程退出之前,該子進程處於殭屍態。 即:父進程沒有正確處理子進程的返回資訊,將導致子進程處於殭屍態,佔據核心資源,造成核心資源的浪費。 下面介紹的函數,就是為了立即結束子進程的殭屍態。 [cpp]  view plain copy #include <sys/types.h>   #include <sys/wait.h>   pid_t wait( int* stat_loc );   pid_t waitpid( pid_t pid, int* stat_loc, int options );   函數說明: wait函數:阻塞該進程,直到某個子進程結束運行為止。返回子進程的PID,並將該子進程的退出狀態資訊儲存於stat_loc參數指向的記憶體中。 sys/wait.h標頭檔中定義了幾個宏,解釋子進程的退出狀態資訊

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.