今天給各位分享execlinux的知識,其中也會對進(jìn)行解釋,如果能碰巧解決你現(xiàn)在面臨的問題,別忘了關(guān)注本站,現(xiàn)在開始吧!
本文目錄一覽:
- 1、linux中fork,source和exec的區(qū)別
- 2、linux中system和exec函數(shù)的區(qū)別
- 3、關(guān)于runtime類exec函數(shù)執(zhí)行l(wèi)inux下文件權(quán)限的問題。
linux中fork,source和exec的區(qū)別
與`fork`不同的是,`exec`函數(shù)并不會復(fù)制當(dāng)前進(jìn)程,而是會用新的程序來替換當(dāng)前進(jìn)程的內(nèi)存空間。這意味著,`exec`調(diào)用后會丟棄原進(jìn)程的代碼和數(shù)據(jù),轉(zhuǎn)而執(zhí)行新的程序。
在fork創(chuàng)建的子進(jìn)程中使用exec函數(shù)族,可以裝入和運行其他程序,實現(xiàn)子進(jìn)程替換原有進(jìn)程,執(zhí)行不同的任務(wù)。使用exec函數(shù)后,子進(jìn)程將被新程序替換,而不會產(chǎn)生新的PID。這意味著新程序與調(diào)用exec的進(jìn)程共享相同的PID。
這三個函數(shù)分別調(diào)用了sys_fork、sys_vfork、sys_clone,最終都調(diào)用了do_fork函數(shù),差別在于參數(shù)的傳遞和一些基本的準(zhǔn)備工作不同。可見這三者最終達(dá)到的最本質(zhì)的目的都是創(chuàng)建一個新的進(jìn)程。
exec的起源源自早期Unix中Shell的運行方式。在啟動用戶程序時,Shell會直接將用戶程序代碼覆蓋自身代碼并清空內(nèi)存,待執(zhí)行完畢后,使用exit()重新初始化Shell代碼。這樣一來,運行用戶進(jìn)程前后Shell幾乎無法保留任何信息。(這與80年代的家用電腦情況類似……DOS的INT 21/4B在處理COM時也大致相同。
fork函數(shù)在Linux下通過復(fù)制進(jìn)程創(chuàng)建新進(jìn)程,新進(jìn)程稱為子進(jìn)程,與父進(jìn)程完全相同,但有例外情況:子進(jìn)程有唯一PID,與現(xiàn)有進(jìn)程組ID不匹配;子進(jìn)程的父進(jìn)程ID與父進(jìn)程ID相同;子進(jìn)程不繼承父進(jìn)程的內(nèi)存鎖和信號量調(diào)整;子進(jìn)程不會從父進(jìn)程繼承未完成的異步I/O操作或上下文。

linux中system和exec函數(shù)的區(qū)別
system是用shell來調(diào)用程序=fork+exec+waitpid,而exec是直接讓你的程序代替用來的程序運行。system 是在單獨的進(jìn)程中執(zhí)行命令,完了還會回到你的程序中。
system()會輸出并返回命令的最后一行結(jié)果。而exec()則不會直接輸出結(jié)果,而是返回命令的最后一行結(jié)果,并允許將所有結(jié)果保存到一個返回的數(shù)組中。passthru()則只調(diào)用命令,并將命令的運行結(jié)果直接輸出到標(biāo)準(zhǔn)輸出設(shè)備上。它們的共同點在于都可以獲取到命令執(zhí)行的狀態(tài)碼。
(1)system()其實就是對fork()和exec()函數(shù)族等的封裝。(2)fork()是用來產(chǎn)生子進(jìn)程的,是現(xiàn)在我知道的唯一一個返回兩個值的函數(shù)(有過有另外的,麻煩網(wǎng)友指出),返回-1表示執(zhí)行失敗;否則返回大于0的值時,表示是子進(jìn)程的進(jìn)程號,返回0時,表示父進(jìn)程創(chuàng)建子進(jìn)程成功。
這三個函數(shù)分別調(diào)用了sys_fork、sys_vfork、sys_clone,最終都調(diào)用了do_fork函數(shù),差別在于參數(shù)的傳遞和一些基本的準(zhǔn)備工作不同。可見這三者最終達(dá)到的最本質(zhì)的目的都是創(chuàng)建一個新的進(jìn)程。
關(guān)于runtime類exec函數(shù)執(zhí)行l(wèi)inux下文件權(quán)限的問題。
argc和argv在mian里面都是可以使用的execlinux,出了main的范圍就不能使用了。再來說execlinux你提出的第一個地方,exec的問題。exec實際上包含了一組函數(shù),execl, execlp, execle, execv, execvp, execvpe 具體使用方法,你man execv就可以得到這些函數(shù)的使用方法。
Runtime.getRuntime().exec(command2).waitFor();注意execlinux:1 我為什么要使用 chmod 777命令呢?在有的機器上面,可能沒有設(shè)置權(quán)限問題。這是你在linux下面執(zhí)行shell腳本需要注意的問題。沒有的話,就需要添加權(quán)限,就用chmod 777,否則在執(zhí)行到Runtime.getRuntime().exec的時侯會出現(xiàn)Permission denied錯誤。
在fork創(chuàng)建的子進(jìn)程中使用exec函數(shù)族,可以裝入和運行其execlinux他程序,實現(xiàn)子進(jìn)程替換原有進(jìn)程,執(zhí)行不同的任務(wù)。使用exec函數(shù)后,子進(jìn)程將被新程序替換,而不會產(chǎn)生新的PID。這意味著新程序與調(diào)用exec的進(jìn)程共享相同的PID。
jsp runtime.getruntime.exec 執(zhí)行不出結(jié)果 50 runtime.getruntime.exec(我的路徑+g++.exe-gcpp-oexe)用來將CPP編譯生成exe文件。
下載并編譯C語言源程序。在Linux系統(tǒng)下,可以復(fù)制下載C語言源程序,利用GCC編譯器編譯,生成要調(diào)用的可執(zhí)行文件。例如:gcc test.c -o test 在Java程序中調(diào)用C程序。在編譯成功生成目標(biāo)文件后,可以利用Java的Runtime類,來執(zhí)行一個外部的可執(zhí)行文件。
關(guān)于execlinux和的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。