Linux中的進程程序替換

Linux中的進程程序替換

  • 1. 替換原理
  • 2. 替換函數
  • 3. 函數解釋
  • 4. 命名理解
  • 程序替換的意義

1. 替換原理

替換原理

用fork創建子進程后執行的是和父進程相同的程序(但有可能執行不同的代碼分支),子進程往往要調用一種exec函數以執行另一個程序。當進程調用一種exec函數時,該進程的用戶空間代碼和數據完全被新程序替換,從新程序的啟動例程開始執行。調用exec并不創建新進程,所以調用exec前后該進程的id并未改變。

在這里插入圖片描述

我們在替換新程序時,只是把我們目標程序的數據和代碼替換到原來的進程的物理內存中(實際上是覆蓋掉原來的代碼和數據)

2. 替換函數

其實有六種以exec開頭的函數,統稱exec函數:

#include <unistd.h>`
int execl(const char *path, const char *arg, ...);
int execlp(const char *file, const char *arg, ...);
int execle(const 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 argv[], char *const envp[]);

3. 函數解釋

這些函數如果調用成功則加載新的程序從啟動代碼開始執行,不再返回。
如果調用出錯則返回-1
所以exec函數只有出錯的返回值而沒有成功的返回值。

4. 命名理解

這些函數原型看起來很容易混,但只要掌握了規律就很好記。

l(list) : 表示參數采用列表
v(vector) : 參數用數組
p(path) : 有p自動搜索環境變量PATH
e(env) : 表示自己維護環境變量

在這里插入圖片描述
exec調用舉例如下:

#include <unistd.h>
int main()
{char *const argv[] = {"ps", "-ef", NULL};char *const envp[] = {"PATH=/bin:/usr/bin", "TERM=console", NULL};execl("/bin/ps", "ps", "-ef", NULL);// 帶p的,可以使用環境變量PATH,無需寫全路徑execlp("ps", "ps", "-ef", NULL);// 帶e的,需要自己組裝環境變量execle("ps", "ps", "-ef", NULL, envp);execv("/bin/ps", argv);// 帶p的,可以使用環境變量PATH,無需寫全路徑execvp("ps", argv);// 帶e的,需要自己組裝環境變量execve("/bin/ps", argv, envp);exit(0);
}

事實上,只有execve是真正的系統調用,其它五個函數最終都調用 execve,所以execve在man手冊 第2節,其它函數在man手冊第3節。這些函數之間的關系如下圖所示。

下圖exec函數族 一個完整的例子

在這里插入圖片描述

程序替換的意義

總的來說:無論哪種方式,程序替換都會立即停止當前正在運行的程序,并用新程序替換它。

程序替換在Linux系統中有一些重要的意義和用途:

軟件更新:程序替換是更新軟件的常見方法之一。通過將舊版本的程序替換為新版本,可以獲得修復的漏洞、改進的功能和性能優化等好處。程序替換使得在不中斷服務的情況下升級軟件成為可能。

系統維護:在系統維護過程中,程序替換可以用于修復損壞的或出現故障的程序。通過替換受損的程序,可以恢復系統的正常運行。

安全性:程序替換可以用于提高系統的安全性。當已知的程序存在安全漏洞時,可以通過替換為更安全的替代程序來減少潛在的風險。此外,通過替換系統默認的程序和工具,可以根據特定的安全需求進行定制。

自定義和個性化:通過程序替換,用戶可以根據自己的需求和喜好選擇和使用不同的程序。這使得用戶可以自定義系統的外觀、功能和行為,從而滿足個人化的需求。

總而言之,程序替換在Linux系統中具有重要的意義,它可以用于軟件更新、系統維護、安全性提升以及自定義和個性化等方面。它是維護和發展Linux系統的重要工具之一。

(本章完)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/160653.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/160653.shtml
英文地址,請注明出處:http://en.pswp.cn/news/160653.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

[Docker]九.Docker compose講解

docker-compose 是 docker 官方的一個開源項目&#xff0c;可以實現對 docker 容器集群的快速編排, docker-compose 通過一個 配置文件 來管理多個 Docker 容器,在配置文件中&#xff0c;所有的容器通過 services 來定義&#xff0c;然后使用 docker-compose腳本 來 啟動&am…

Nuxt.js Next.js Nest.js

Nuxt.js和Next.js都是服務端渲染框架(SSR)&#xff0c;屬于前端框架,Nest.js則是node框架,屬于后端框架。 其中Nuxt.js是vue的ssr框架&#xff0c;Next.js是react的ssr框架。 都是比vue和react更上層的前端框架。 文章目錄 1.SSR2.Nuxt2.1 Nuxt的下載2.2 Nuxt的集成2.3 Nuxt…

HuggingFace-利用BERT預訓練模型實現中文情感分類(下游任務)

準備數據集 使用編碼工具 首先需要加載編碼工具&#xff0c;編碼工具可以將抽象的文字轉成數字&#xff0c;便于神經網絡后續的處理&#xff0c;其代碼如下&#xff1a; # 定義數據集 from transformers import BertTokenizer, BertModel, AdamW # 加載tokenizer token Ber…

cobol基本動詞

cobol基本動詞 基本動詞用于過程部中的數據處理。每個語句總是以cobol動詞開頭。 input&#xff08;輸入&#xff09;/output&#xff08;輸出&#xff09; 輸入輸出動詞用于從用戶獲取數據。并顯示cobol程序的輸出。 accept 用于從操作系統或者用戶獲取數據&#xff0c;例如日…

langchain 部署組件-LangServe

原文&#xff1a;&#x1f99c;?&#x1f3d3; LangServe | &#x1f99c;?&#x1f517; Langchain LangServe &#x1f6a9; We will be releasing a hosted version of LangServe for one-click deployments of LangChain applications. Sign up here to get on the wa…

OpenLayers入門,OpenLayers6的WebGLPointsLayer圖層樣式和運算符詳解,四種symbolType類型案例

專欄目錄: OpenLayers入門教程匯總目錄 前言 本章講解使用OpenLayers6的WebGL圖層顯示大量點情況下,列舉出所有WebGLPointsLayer圖層所支持的所有樣式運算符大全。 補充說明 本篇主要介紹OpenLayers6.x版本的webgl圖層,OpenLayers7.x和OpenLayers8.x主要更新內容就是webgl…

GB28181學習(十七)——基于jrtplib實現tcp被動和主動發流

前言 GB/T28181-2022實時流的傳輸方式介紹&#xff1a;https://blog.csdn.net/www_dong/article/details/134255185 基于jrtplib實現tcp被動和主動收流介紹&#xff1a;https://blog.csdn.net/www_dong/article/details/134451387 本文主要介紹下級平臺或設備發流功能&#…

生活如果真能像隊列一樣的話

生活如果真能像隊列一樣&#xff0c;那該多好啊。 —————————————————————————————————————————— 背包&#xff0c;隊列 可以先看他們的API&#xff1a;都含有一個無參構造函數&#xff0c;添加單個元素的方法&#xff0c;測試集合…

php項目從寶塔面板切換轉到phpstudy小皮面板

寶塔面板轉phpstudy面板 版本 寶塔面板8.0.1 phpstudy面板8.1.1.3 步驟 1、寶塔面板,找到項目文件夾,打包、下載到本地、解壓 2、本地windows系統安裝phpstudy面板,選擇盡可能一樣的配置 比如寶塔php7.4.33,可能phpstudy面板只有php7.4.3,也行 大環境一定要一致,比如…

力扣算法練習BM46—最小的K個數

題目 給定一個長度為 n 的可能有重復值的數組&#xff0c;找出其中不去重的最小的 k 個數。例如數組元素是4,5,1,6,2,7,3,8這8個數字&#xff0c;則最小的4個數字是1,2,3,4(任意順序皆可)。 數據范圍&#xff1a;0≤k,n≤10000&#xff0c;數組中每個數的大小0≤val≤1000 要…

linux signal 機制

ref&#xff1a; Linux操作系統學習筆記&#xff08;十六&#xff09;進程間通信之信號 | Ty-Chens Home https://www.cnblogs.com/renxinyuan/p/3867593.html 當執行kill -9 PID時系統發生了什么 -

Codeforces Round 910 (Div. 2) D. Absolute Beauty

D. Absolute Beauty 有兩個長度為 n n n 的整數數組 a 1 , a 2 , … , a n a_1,a_2,\ldots,a_n a1?,a2?,…,an? 和 b 1 , b 2 , … , b n b_1,b_2,\ldots,b_n b1?,b2?,…,bn? 。他將數組 b b b 的美麗值定義為 ∑ i 1 n ∣ a i ? b i ∣ . \sum_{i1}^{n} |a_i - b…

基于材料生成算法優化概率神經網絡PNN的分類預測 - 附代碼

基于材料生成算法優化概率神經網絡PNN的分類預測 - 附代碼 文章目錄 基于材料生成算法優化概率神經網絡PNN的分類預測 - 附代碼1.PNN網絡概述2.變壓器故障診街系統相關背景2.1 模型建立 3.基于材料生成優化的PNN網絡5.測試結果6.參考文獻7.Matlab代碼 摘要&#xff1a;針對PNN神…

JDK命令使用總結

目錄 javacjava javac 將源碼(*.java)編譯成字節碼(*.class) javac HelloWorld.javajava 運行字節碼(*.class) 不能加后綴名 java HelloWorld直接運行單文件源碼(*.java) Java11以上才支持 java HelloWorld.java

ROSNS3(一)

https://github.com/malintha/rosns3 第一步&#xff1a;clone和構建rosns3客戶端 第二步&#xff1a;運行 最詳細的ubuntu 安裝 docker教程 - 知乎 1. unable to find source space /home/muta/src 解決方法&#xff1a; 將副將將碰到的bug&#xff0c;解決方法_#include &…

【C++ Primer Plus學習記錄】遞增運算符(++)和遞減運算符(--)

遞增運算符&#xff08;&#xff09;和遞減運算符&#xff08;--&#xff09;&#xff1a;前綴版本位于操作數前面&#xff0c;如x&#xff1b;后綴版本位于操作數后面&#xff0c;如x。兩個版本對操作數的影響是一樣的&#xff0c;但是影響的時間不同。這就像吃飯前買單和吃飯…

Python從零開始快速搭建一個語音對話機器人

文章目錄 01-初心緣由02-準備工作03-語音機器人的搭建思路04-語音生成音頻文件05-音頻文件轉文字STT06-與圖靈機器人對話07-文字轉語音08-語音對話機器人的完整代碼09-結束語10-有問必答關于Python技術儲備一、Python所有方向的學習路線二、Python基礎學習視頻三、精品Python學…

SSH連接遠程服務器報錯:WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED 解決方法

一.錯誤描述 報錯信息里提示了路徑信息/root/.ssh/known_hosts:20 二.解決方案 方法一 輸入以下指令&#xff1a; ssh-keygen -R XXX&#xff08;需要連接遠程服務器的ip&#xff09; 按照我的例子ip:10.165.7.136&#xff0c;會返回以下信息: 重新嘗試連接&#xff1a; 輸…

C++學習 --set

目錄 1&#xff0c; 什么是set 2&#xff0c; 創建set 2-1&#xff0c; 標準數據類型 2-2&#xff0c; 自定義數據類型 2-3&#xff0c; 其他創建方式 3&#xff0c; 操作set 3-1&#xff0c; 賦值 3-2&#xff0c; 添加元素&#xff08;insert&#xff09; 3-2-1&…