国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Linux :進(jìn)程的程序替換

這篇具有很好參考價(jià)值的文章主要介紹了Linux :進(jìn)程的程序替換。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

目錄

一、什么是程序替換

1.1程序替換的原理

1.2更改為多進(jìn)程版本

二、各種exe接口

2.2execlp

??編輯

2.2execv

2.3execle、execve、execvpe


一、什么是程序替換

1.1程序替換的原理

用fork創(chuàng)建子進(jìn)程后執(zhí)行的是和父進(jìn)程相同的程序(但有可能執(zhí)行不同的代碼分支),子進(jìn)程往往要調(diào)用一種exec函數(shù)以執(zhí)行另一個(gè)程序。當(dāng)進(jìn)程調(diào)用一種exec函數(shù)時(shí),該進(jìn)程的用戶空間代碼和數(shù)據(jù)完全被新程序替換,從新程序的啟動(dòng)例程開始執(zhí)行。調(diào)用exec并不創(chuàng)建新進(jìn)程,所以調(diào)用exec前后該進(jìn)程的id并未改變。
Linux :進(jìn)程的程序替換,Linux,linux,運(yùn)維,服務(wù)器

就相當(dāng)于在執(zhí)行一個(gè)程序時(shí),要從磁盤中將新的數(shù)據(jù)和代碼加載到內(nèi)存中,將老程序的數(shù)據(jù)和代碼替換掉,這個(gè)現(xiàn)象就叫做程序替換。程序替換過程中并沒有創(chuàng)建新的進(jìn)程,而作為用戶我們沒有資格去直接進(jìn)行程序替換,所以如果想實(shí)現(xiàn)程序替換,就必須使用系統(tǒng)調(diào)用execl。

Linux :進(jìn)程的程序替換,Linux,linux,運(yùn)維,服務(wù)器

Linux :進(jìn)程的程序替換,Linux,linux,運(yùn)維,服務(wù)器

即pcb這個(gè)內(nèi)核數(shù)據(jù)結(jié)構(gòu)不換,代碼和數(shù)據(jù)換了。

第一個(gè)參數(shù)*Path是要尋找的程序,第二個(gè)參數(shù)*arg表示你想如何執(zhí)行,而最后的...是可變參數(shù)列表。

我們可以通過這個(gè)指令來對(duì)ls指令進(jìn)行模擬。

Linux :進(jìn)程的程序替換,Linux,linux,運(yùn)維,服務(wù)器

Linux :進(jìn)程的程序替換,Linux,linux,運(yùn)維,服務(wù)器

可以看到 ls命令很順利的執(zhí)行了,可pccontrol.c最后一個(gè)一個(gè)printf卻沒有執(zhí)行,這是為什么呢?

答案很簡(jiǎn)單,因?yàn)槌绦虮惶鎿Q了。

Linux :進(jìn)程的程序替換,Linux,linux,運(yùn)維,服務(wù)器

execl只有失敗返回沒有成功返回。 比如給定一個(gè)不存在的路徑。此時(shí)執(zhí)行完畢后如果去echo $?就可以看到錯(cuò)誤碼為1。如果成功替換完成,不創(chuàng)建新的進(jìn)程。

?而我們創(chuàng)建一個(gè)進(jìn)程,是先創(chuàng)建PCB、地址空間、頁表,然后再把程序加載到內(nèi)存,而程序替換所做的工作就是加載。

1.2更改為多進(jìn)程版本

Linux :進(jìn)程的程序替換,Linux,linux,運(yùn)維,服務(wù)器

Linux :進(jìn)程的程序替換,Linux,linux,運(yùn)維,服務(wù)器

?我們也可以創(chuàng)建一個(gè)子進(jìn)程,讓子進(jìn)程去進(jìn)行程序替換,這樣父進(jìn)程就可以得到運(yùn)行結(jié)果,因?yàn)檫M(jìn)程具有獨(dú)立性,創(chuàng)建子進(jìn)程后,當(dāng)要讓子進(jìn)程去進(jìn)行程序替換時(shí)就會(huì)發(fā)生寫實(shí)拷貝,開辟新的空間,這樣就不會(huì)影響父進(jìn)程。

所以我們的shell運(yùn)行原理我們也可以類推出來,當(dāng)我們?cè)趕hell中輸入指令時(shí),就會(huì)創(chuàng)建一個(gè)子進(jìn)程,然后shell去wait等待子進(jìn)程,子進(jìn)程進(jìn)行程序替換發(fā)生寫時(shí)拷貝開辟新的空間,然后去執(zhí)行。

二、各種exe接口

Linux :進(jìn)程的程序替換,Linux,linux,運(yùn)維,服務(wù)器

我們可以看到,一共有6個(gè)接口, 加上execv一共有7個(gè)接口。

Linux :進(jìn)程的程序替換,Linux,linux,運(yùn)維,服務(wù)器

2.2execlp

?

execlp,最后為p(PATH)的不需要告訴操作系統(tǒng)絕對(duì)路徑,只需要告訴文件名。系統(tǒng)進(jìn)行替換時(shí)會(huì)自動(dòng)去PATH環(huán)境變量中查找。

?Linux :進(jìn)程的程序替換,Linux,linux,運(yùn)維,服務(wù)器

最后的執(zhí)行結(jié)果和execl是一樣的?。

2.2execv

Linux :進(jìn)程的程序替換,Linux,linux,運(yùn)維,服務(wù)器

第一個(gè)參數(shù)是絕對(duì)或相對(duì)路徑,第二個(gè)參數(shù)是argv,即命令行參數(shù)表,類似于main函數(shù)的參數(shù)。

而exec結(jié)尾為l表示list,即將元素以鏈表的形式傳。

而v結(jié)尾表示vector,即以數(shù)組形式傳。

Linux :進(jìn)程的程序替換,Linux,linux,運(yùn)維,服務(wù)器

execvp類比于上面的execlp

exec*可以執(zhí)行系統(tǒng)的指令,也可以執(zhí)行自己的程序,無論是什么語言,都可以在linux下跑。因?yàn)樗械恼Z言運(yùn)行之后都是進(jìn)程。

2.3execle、execve、execvpe

Linux :進(jìn)程的程序替換,Linux,linux,運(yùn)維,服務(wù)器

這些函數(shù)原型看起來很容易混,但只要掌握了規(guī)律就很好記。
l(list) : 表示參數(shù)采用列表
v(vector) : 參數(shù)用數(shù)組
p(path) : 有p自動(dòng)搜索環(huán)境變量PATH
e(env) : 表示自己維護(hù)環(huán)境變量

區(qū)別就是最后帶上了環(huán)境變量的一個(gè)參數(shù)。

首先如果不使用帶環(huán)境變量的調(diào)用,可以通過顯示傳的方式傳給操作系統(tǒng)。我們也可以在C語言寫的程序中去通過傳參給一段C++ 代碼編譯成的可執(zhí)行程序。

Linux :進(jìn)程的程序替換,Linux,linux,運(yùn)維,服務(wù)器

Linux :進(jìn)程的程序替換,Linux,linux,運(yùn)維,服務(wù)器

Linux :進(jìn)程的程序替換,Linux,linux,運(yùn)維,服務(wù)器

通過以上我們可以看到,通過子進(jìn)程完成了進(jìn)程切換成功運(yùn)行了mytest文件并且將命令行參數(shù)傳給了mytest的argv,父進(jìn)程也成功回收了子進(jìn)程。


以上傳了命令行參數(shù),那環(huán)境變量該如何傳給要替換的程序呢?

當(dāng)我們不顯示去傳環(huán)境變量表時(shí)會(huì)發(fā)生什么呢??

Linux :進(jìn)程的程序替換,Linux,linux,運(yùn)維,服務(wù)器

Linux :進(jìn)程的程序替換,Linux,linux,運(yùn)維,服務(wù)器

Linux :進(jìn)程的程序替換,Linux,linux,運(yùn)維,服務(wù)器

子進(jìn)程默認(rèn)可以通過地址空間繼承的方式,讓所有子進(jìn)程拿到環(huán)境變量。

進(jìn)程程序替換,不會(huì)替換環(huán)境變量數(shù)據(jù)。

1.如果我們想讓子進(jìn)程繼承全部的環(huán)境變量,直接就能拿到

2.如果單純新增的話使用putenv("GA=AAAAAA");

3.如果想設(shè)置全新的環(huán)境變量,就可以用到execle


Linux :進(jìn)程的程序替換,Linux,linux,運(yùn)維,服務(wù)器

Linux :進(jìn)程的程序替換,Linux,linux,運(yùn)維,服務(wù)器

再次運(yùn)行,環(huán)境變量就變成我們?cè)O(shè)置的全新的環(huán)境變量了,也叫覆蓋方式。

Linux :進(jìn)程的程序替換,Linux,linux,運(yùn)維,服務(wù)器

?而這么多的接口功能上基本上不存在太大的差異,只是傳參的區(qū)別以及使用方式不同,而程序替換真正的系統(tǒng)調(diào)用只有一個(gè),就是上圖所示的execve,其余所有的調(diào)用都是封裝了execve。文章來源地址http://www.zghlxwxcb.cn/news/detail-847066.html

到了這里,關(guān)于Linux :進(jìn)程的程序替換的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Linux服務(wù)器上查詢進(jìn)程 ps aux

    在Linux服務(wù)器上查詢進(jìn)程,有以下幾種方法: 使用ps命令。這個(gè)命令用于報(bào)告當(dāng)前系統(tǒng)的進(jìn)程狀態(tài)??梢杂靡韵路绞绞褂胮s命令來查看進(jìn)程信息: ps aux:顯示系統(tǒng)中所有進(jìn)程的信息。 ps -e:顯示所有進(jìn)程的信息。 ps -f:顯示進(jìn)程的所有信息。 ps -l:以長(zhǎng)格式顯示進(jìn)程信息。

    2024年02月05日
    瀏覽(36)
  • 【Linux運(yùn)維】shell腳本檢查服務(wù)器內(nèi)存和CPU利用率

    在管理服務(wù)器時(shí)候?qū)懥艘粋€(gè) shell腳本,在服務(wù)上實(shí)現(xiàn)每天凌晨3點(diǎn)查系統(tǒng)的指定文件夾下的容量大小,如果超過10G就要?jiǎng)h除3天前的內(nèi)容,還要時(shí)刻查詢內(nèi)存和cpu利用率,如果超過80%就要提示用戶出現(xiàn)過載 將以上代碼保存為一個(gè).sh文件,然后通過crontab在每天凌晨3點(diǎn)運(yùn)行即可:

    2024年02月09日
    瀏覽(33)
  • Linux服務(wù)器中查看進(jìn)程的四種方法

    1. 使用 ps aux 命令來查看,能以簡(jiǎn)單列表的形式顯示出進(jìn)程信息 ps aux 用于報(bào)告當(dāng)前系統(tǒng)的進(jìn)程狀態(tài)??梢源钆鋕ill指令隨時(shí)中斷、刪除不必要的程序. ps 命令是最基本同時(shí)也是非常強(qiáng)大的進(jìn)程查看命令,使用該命令可以確定有哪些進(jìn)程正在運(yùn)行和運(yùn)行的狀態(tài)、進(jìn)程是否結(jié)束、進(jìn)

    2024年02月02日
    瀏覽(33)
  • Linux網(wǎng)絡(luò)編程:多進(jìn)程 多線程_并發(fā)服務(wù)器

    文章目錄: 一:wrap常用函數(shù)封裝 wrap.h? wrap.c server.c封裝實(shí)現(xiàn) client.c封裝實(shí)現(xiàn) 二:多進(jìn)程process并發(fā)服務(wù)器 server.c服務(wù)器 實(shí)現(xiàn)思路 代碼邏輯? client.c客戶端 三:多線程thread并發(fā)服務(wù)器 server.c服務(wù)器 實(shí)現(xiàn)思路 代碼邏輯? client.c客戶端 ???? ??read 函數(shù)的返回值 wrap.h? wrap

    2024年02月12日
    瀏覽(31)
  • Linux本地部署1Panel服務(wù)器運(yùn)維管理面板并實(shí)現(xiàn)公網(wǎng)訪問

    Linux本地部署1Panel服務(wù)器運(yùn)維管理面板并實(shí)現(xiàn)公網(wǎng)訪問

    1Panel 是一個(gè)現(xiàn)代化、開源的 Linux 服務(wù)器運(yùn)維管理面板。高效管理,通過 Web 端輕松管理 Linux 服務(wù)器,包括主機(jī)監(jiān)控、文件管理、數(shù)據(jù)庫管理、容器管理等 下面我們介紹在Linux 本地安裝1Panel 并結(jié)合cpolar 內(nèi)網(wǎng)穿透工具實(shí)現(xiàn)遠(yuǎn)程訪問1Panel 管理界面 執(zhí)行如下命令一鍵安裝 1Panel: 安

    2024年02月04日
    瀏覽(107)
  • Linux服務(wù)器常見運(yùn)維性能測(cè)試(1)綜合跑分unixbench、superbench

    Linux服務(wù)器常見運(yùn)維性能測(cè)試(1)綜合跑分unixbench、superbench

    最近需要測(cè)試一批服務(wù)器的相關(guān)硬件性能,以及在常規(guī)環(huán)境下的硬件運(yùn)行穩(wěn)定情況,需要持續(xù)拷機(jī)測(cè)試穩(wěn)定性。所以找了一些測(cè)試用例。本次測(cè)試包括在服務(wù)器的高低溫下性能記錄及壓力測(cè)試,高低電壓下性能記錄及壓力測(cè)試,常規(guī)環(huán)境下CPU滿載穩(wěn)定運(yùn)行的功率記錄。 這個(gè)系

    2024年02月04日
    瀏覽(103)
  • 藍(lán)易云:Linux系統(tǒng)sshd命令 – openssh服務(wù)器守護(hù)進(jìn)程

    sshd是Linux系統(tǒng)中的一個(gè)守護(hù)進(jìn)程,它提供了遠(yuǎn)程登錄服務(wù)和安全的文件傳輸功能。以下是sshd的詳細(xì)教程。 1. 安裝openssh-server 在Debian/Ubuntu上安裝openssh-server命令如下: sudo apt-get update sudo apt-get install openssh-server 在CentOS/RHEL上安裝openssh-server命令如下: sudo yum update sudo yum install

    2024年02月16日
    瀏覽(26)
  • 基于linux下的高并發(fā)服務(wù)器開發(fā)(第二章)- 2.7 進(jìn)程退出、孤兒進(jìn)程、僵尸進(jìn)程

    基于linux下的高并發(fā)服務(wù)器開發(fā)(第二章)- 2.7 進(jìn)程退出、孤兒進(jìn)程、僵尸進(jìn)程

    ? 父進(jìn)程運(yùn)行結(jié)束,但子進(jìn)程還在運(yùn)行(未運(yùn)行結(jié)束),這樣的子進(jìn)程就稱為孤兒進(jìn)程 (Orphan Process)。 ? 每當(dāng)出現(xiàn)一個(gè)孤兒進(jìn)程的時(shí)候,內(nèi)核就把孤兒進(jìn)程的父進(jìn)程設(shè)置為 init ,而 init 進(jìn)程會(huì)循環(huán)地 wait() 它的已經(jīng)退出的子進(jìn)程。這樣,當(dāng)一個(gè)孤兒進(jìn)程凄涼地結(jié)束 了其生

    2024年02月16日
    瀏覽(24)
  • Linux高并發(fā)服務(wù)器開發(fā)---筆記1(環(huán)境搭建、系統(tǒng)編程、多進(jìn)程)

    Linux高并發(fā)服務(wù)器開發(fā)---筆記1(環(huán)境搭建、系統(tǒng)編程、多進(jìn)程)

    0613 首先這整個(gè)系列筆記屬于筆記①:牛客校招沖刺集訓(xùn)營(yíng)—C++工程師中的 第四章 筆記。 視頻課鏈接: 視頻1:Linux高并發(fā)服務(wù)器開發(fā)(40h); 視頻2:第4章 項(xiàng)目制作與技能提升(錄播)(26h30min); 視頻課3: 第5章 高頻考點(diǎn)與真題精講(錄播)中的 5.10-5.13 項(xiàng)目回顧 有個(gè)學(xué)

    2024年02月15日
    瀏覽(108)
  • [1Panel]開源,現(xiàn)代化,新一代的 Linux 服務(wù)器運(yùn)維管理面板

    [1Panel]開源,現(xiàn)代化,新一代的 Linux 服務(wù)器運(yùn)維管理面板

    本期測(cè)評(píng)試用一下1Panel這款面板。1Panel是國(guó)內(nèi)飛致云旗下開源產(chǎn)品。整個(gè)界面簡(jiǎn)潔清爽,后端使用GO開發(fā),前端使用VUE的Element-Plus作為UI框架,整個(gè)面板的管理都是基于docker的,想法很先進(jìn)。官方還提供了視頻的使用教程,本期為大家按照本專欄的基本內(nèi)容進(jìn)行多方面的測(cè)評(píng)。

    2024年02月07日
    瀏覽(67)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包