導航:首頁 > 編程系統 > linux終端exec

linux終端exec

發布時間:2025-01-14 10:57:34

『壹』 linux的exec是什麼意思

前三個和最後一個是兩個類型。前三個主要是Linux用來創建新的進程(線程)而設計的,exec()系列函數則是用來用指定的程序替換當前進程的所有內容。所以exec()系列函數經常在前三個函數使用之後調用,來創建一個全新的程序運行環境。Linux用init進程啟動其他進程的過程一般都是這樣的。下面說fork、vfork和clone三個函數。這三個函數分別調用了sys_fork、sys_vfork、sys_clone,最終都調用了do_fork函數,差別在於參數的傳遞和一些基本的准備工作不同。可見這三者最終達到的最本質的目的都是創建一個新的進程。在這里需要明確一下,Linux內核中沒有獨立的「線程」結構,Linux的線程就是輕量級進程,換言之基本控制結構和Linux的進程是一樣的(都是通過struct task_struct管理)。fork是最簡單的調用,不需要任何參數,僅僅是在創建一個子進程並為其創建一個獨立於父進程的空間。fork使用COW(寫時拷貝)機制,並且COW了父進程的棧空間。vfork是一個過時的應用,vfork也是創建一個子進程,但是子進程共享父進程的空間。在vfork創建子進程之後,父進程阻塞,直到子進程執行了exec()或者exit()。vfork最初是因為fork沒有實現COW機制,而很多情況下fork之後會緊接著exec,而exec的執行相當於之前fork復制的空間全部變成了無用功,所以設計了vfork。而現在fork使用了COW機制,唯一的代價僅僅是復制父進程頁表的代價,所以vfork不應該出現在新的代碼之中。在Linux的manpage中隊vfork有這樣一段話:It is rather unfortunate that Linux revived this specter from the past. The BSD man page states: "This system call will be eliminated when proper system sharing mechanisms are implemented. Users should not depend on the memory sharing semantics of vfork() as it will, in that case, be made synonymous to fork(2)."clone是Linux為創建線程設計的(雖然也可以用clone創建進程)。所以可以說clone是fork的升級版本,不僅可以創建進程或者線程,還可以指定創建新的命名空間(namespace)、有選擇的繼承父進程的內存、甚至可以將創建出來的進程變成父進程的兄弟進程等等。clone和fork的調用方式也很不相同,clone調用需要傳入一個函數,該函數在子進程中執行。此外,clone和fork最大不同在於clone不再復制父進程的棧空間,而是自己創建一個新的。關於Linux命令的介紹,看看《linux就該這么學》,具體關於這一章地址3w(dot)linuxprobe/chapter-02(dot)html
閱讀全文

與linux終端exec相關的資料

熱點內容
安卓車載導航一會沒聲音了 瀏覽:339
u盤刪除音樂文件 瀏覽:194
prcc20152版本下載 瀏覽:138
翻譯一份英語文件多少錢 瀏覽:866
蘋果手機瀏覽器看flash 瀏覽:335
app內如何改文字 瀏覽:275
中國銀行app怎麼切換登錄 瀏覽:956
列印pdf發票文件如何打半頁 瀏覽:252
文件五十幾兆為什麼不能微信收藏 瀏覽:11
msp430f5529頭文件 瀏覽:99
用哪個小說app比較好 瀏覽:144
建設項目用地預審文件有效期為多少年 瀏覽:827
三菱編程模擬io表怎麼填 瀏覽:638
ug四軸編程培訓哪裡學 瀏覽:845
永恆紀元安卓版攻略 瀏覽:205
如何從mysql資料庫中查詢數據 瀏覽:708
javaargb 瀏覽:221
word文件直接打不開 瀏覽:704
好看的電腦文件歸檔軟體 瀏覽:457
mac版photoshop教程 瀏覽:282

友情鏈接