導航:首頁 > 編程系統 > 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相關的資料

熱點內容
去廣告qq下載地址 瀏覽:15
win10搜索框重新顯示不出來 瀏覽:874
tomcat版本區別 瀏覽:475
appstore電腦版有什麼好玩的游戲 瀏覽:544
南陽網站怎麼推廣 瀏覽:31
解套app什麼用 瀏覽:682
安卓設置文件許可權管理 瀏覽:451
蘋果電腦隱藏文件怎麼顯示 瀏覽:246
vuejscontextmenu 瀏覽:888
為什麼app評分總是彈窗 瀏覽:975
德塔文榜數據最高多少 瀏覽:102
參觀工具管理擺放有感 瀏覽:617
去哪裡找公司項目的財務數據 瀏覽:573
飢荒linux下載官網 瀏覽:593
買二手房上什麼網站靠譜 瀏覽:556
ansys怎麼保存文件 瀏覽:364
qq空間套裝免費代碼 瀏覽:408
如何控制電信網路電視 瀏覽:140
工廠統計局數據有哪些 瀏覽:398
jsp靠右顯示 瀏覽:397

友情鏈接