Linux-進程替換exec

文章目錄

    • 進程替換
    • exec 函數族使用說明
    • 查看命令的路徑 which
    • 測試 execl
    • 測試 execlp
    • 測試 execv
    • 測試 execvp

進程替換

概述

在 Windows 平臺下,我們可以通過雙擊運行可執行程序,讓這個可執行程序成為一個進程;而在 Linux 平臺,我們可以通過 ./ 運行,讓一個可執行程序成為一個進程。

但是,如果我們本來就運行著一個程序(進程),我們如何在這個進程內部啟動一個外部程序,由內核將這個外部程序讀入內存,使其執行起來成為一個進程呢?這里我們通過 exec 函數族實現。

exec 函數族,顧名思義,就是一簇函數,在 Linux 中,并不存在 exec() 函數,exec 指的是一組函數,一共有 6 個:

#include <unistd.h>
extern char **environ;int execl(const char *path, const char *arg, .../* (char  *) NULL */);
int execlp(const char *file, const char *arg, ... /* (char  *) NULL */);
int execle(const char *path, const char *arg, .../*, (char *) NULL, char * const envp[] */);
int execv(const char *path, char *const argv[]);
int execvp(const char *file, char *const argv[]);
int execvpe(const char *file, char *const argv[], char *const envp[]);int execve(const char *filename, char *const argv[], char *const envp[]);

其中只有 execve() 是真正意義上的系統調用,其它都是在此基礎上經過包裝的庫函數。

exec 函數族的作用是根據指定的文件名或目錄名找到可執行文件,并用它來取代調用進程的內容,換句話說,就是在調用進程內部執行一個可執行文件。

進程調用一種 exec 函數時,該進程完全由新程序替換,而新程序則從其 main 函數開始執行。因為調用 exec 并不創建新進程,所以前后的進程 ID (當然還有父進程號、進程組號、當前工作目錄……)并未改變。exec 只是用另一個新程序替換了當前進程的正文、數據、堆和棧段(進程替換)。

在這里插入圖片描述

exec 函數族使用說明

exec 函數族的 6 個函數看起來似乎很復雜,但實際上無論是作用還是用法都非常相似,只有很微小的差別。

在這里插入圖片描述

補充說明:

l(list)參數地址列表,以空指針結尾
v(vector)存有各參數地址的指針數組的地址
p(path)按 PATH 環境變量指定的目錄搜索可執行文件
e(environment)存有環境變量字符串地址的指針數組的地址

exec 函數族與一般的函數不同,exec 函數族中的函數執行成功后不會返回,而且,exec 函數族下面的代碼執行不到。只有調用失敗了,它們才會返回 -1,失敗后從原程序的調用點接著往下執行。

查看命令的路徑 which

which 命令

which ls

測試 execl

#include <stdio.h>
#include <string.h> 
#include <stdlib.h> #include <unistd.h>int test01()
{//執行 ls -l /home//參數一: 可執行文件的路徑//參數二: 可執行文件的名字//參數三: 選項//參數四: 參數//最后一個參數一定要是是NULLexecl("/bin/ls", "ls", "-l", "/home", NULL);printf("hello world\n");return 0;}

測試 execlp

int test01()
{//執行 ls -l /home//參數一: 可執行文件//參數二: 可執行文件的名字//參數三: 選項//參數四: 參數//最后一個參數一定要是是NULLexecl("ls", "ls", "-l", "/home", NULL);printf("hello world\n");return 0;}

測試 execv

int test01()
{char *const argv[] = {"ls", "-l", "/home", NULL};//執行 ls -l /home//參數一: 可執行文件//參數二: 可執行文件的名字execv("/bin/ls", argv);printf("hello world\n");return 0;
}

測試 execvp

int test01()
{char *const argv[] = {"ls", "-l", "/home", NULL};//執行 ls -l /home//參數一: 可執行文件//參數二: 可執行文件的名字execvp("ls",argv);printf("hello world\n");return 0;
}

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

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

相關文章

Seaborn數據可視化實戰:Seaborn數據可視化實戰入門

Seaborn數據可視化實戰&#xff1a;從數據到圖表的完整旅程 學習目標 通過本課程的學習&#xff0c;你將能夠掌握使用Seaborn進行數據可視化的完整流程&#xff0c;從數據準備到圖表設計&#xff0c;再到最終的圖表呈現。本課程將通過一個具體的項目案例&#xff0c;幫助你全面…

控制系統仿真之時域分析(二)

一、時域分析法時域分析法是從傳遞函數出發直接在時域上研究控制系統性能的方法&#xff0c;實質上是研究系統在某典型輸入信號下隨時間變化的曲線&#xff0c;從而分析系統性能。控制系統的時域響應決定于系統本身的參數和結構&#xff0c;還有系統的初始狀態&#xff0c;以及…

PDF 表單創建與分發

PDF 表單是一種交互式文檔&#xff0c;允許用戶填寫信息、做出選擇并提交數據。與靜態 PDF 不同&#xff0c;PDF 表單包含可交互的字段元素&#xff0c;如文本框、復選框、單選按鈕等。#mermaid-svg-sZe9We4UG0yKymyl {font-family:"trebuchet ms",verdana,arial,san…

Guava 簡介:讓 Java 開發更高效

Guava 簡介&#xff1a;讓 Java 開發更高效 Guava 是由 Google 開源的 Java 庫&#xff0c;旨在為開發者提供一系列實用的工具類&#xff0c;以提高開發效率。它包含了集合類、緩存、并發工具、字符串處理等實用方法。 Guava 的常用場景 集合處理&#xff1a;Guava 提供了多種擴…

「ECG信號處理——(24)基于ECG和EEG信號的多模態融合疲勞分析」2025年8月23日

目錄 一、引言 二、核心原理 2.1 心電 HRV 疲勞關聯原理 2.2 腦電 EEG 疲勞關聯原理 2.3 疲勞綜合指數 三、數據處理流程 四、結果展示與分析 參考文獻 一、引言 針對作業安全&#xff08;如駕駛、精密操作&#xff09;場景下的疲勞狀態實時監測需求&#xff0c;本文提…

EXCEL自動調整列寬適應A4 A3 A2

Public xlPaperA2%Sub 填滿頁面排版()xlPaperA2 66 A2編號66Dim ws As Worksheet: Set ws ActiveSheetDim FirstCol As Long, LastCol As Long, LastRow As LongDim TargetRange As RangeDim UsablePageWidth As DoubleDim CurrentWidth As DoubleDim StartFontSize As Doubl…

Linux系統性能優化全攻略:從CPU到網絡的全方位監控與診斷

引言 在Linux系統運維和開發過程中&#xff0c;系統性能優化是一個永恒的話題。無論是服務器負載過高&#xff0c;還是應用程序響應緩慢&#xff0c;準確快速地定位問題根源至關重要。本文將全面介紹Linux系統中常用的性能診斷工具和方法&#xff0c;幫助您從CPU、內存、磁盤I/…

uniapp+vue+uCharts開發常見問題匯總

項目結構&#xff1a;uniapp vue2 uni-ui uCharts 1、chunk-vendors.js:2765[Vue warn]: Invalid prop: custom validator check failed for prop "navigationBarTextStyle". 檢索發現原因&#xff1a; 在 pages.json 文件中&#xff0c;navigationBarTextStyle 屬…

【甲烷數據集】EPA-美國2012-2020年網格化甲烷清單

目錄 數據概述 數據特征 數據版本與年份 排放源類型(示例) 時間變化處理 數據下載 參考 根據美國環保署(EPA)官網 《U.S. Gridded Methane Emissions》頁面 的內容,以下是對 美國網格化甲烷清單(Gridded Methane GHGI) 的詳細介紹。 數據概述 EPA-U.S. Gridded Methan…

【溫室氣體數據集】NOAA CCGG 飛機觀測溫室氣體

目錄 數據集概述 采樣方式 測量氣體 數據用途 觀測站點 NOAA CCGG 飛機觀測站點信息 項目特色 數據訪問 參考 NOAA 全球監測實驗室(Global Monitoring Laboratory, GML)提供的 Carbon Cycle Greenhouse Gases Aircraft Program 數據集是一個關于溫室氣體在大氣中垂直分布的觀…

FreeRTOS,互斥量 (Mutex)

1. 信號量 (Semaphore) 通俗理解&#xff1a;信號量就像停車場的空位計數器。當有車進入時&#xff0c;計數器減1&#xff1b;當有車離開時&#xff0c;計數器加1。如果計數器為0&#xff0c;新車必須等待直到有空位。 #include "FreeRTOS.h" #include "semphr.…

SQL查詢-設置局部變量(PostgreSQL、MySQL)

&#x1f60b;博主在工作中編寫復雜SQL語句時&#xff0c;經常需要替換查詢值進行測試。所以需要用到局部變量設置&#xff0c;可以減輕測試時的壓力。 目錄使用場景1.常規寫法2.局部變量寫法&#xff08;1&#xff09;PostgreSQL示例注意事項&#xff08;2&#xff09;MySQL示…

2962 統計最大元素出現至少k次的子數組

2962 統計最大元素出現至少k次的子數組 文章目錄2962 統計最大元素出現至少k次的子數組1 題目2 解答1 題目 給你一個整數數組 nums 和一個 正整數 k 。 請你統計有多少滿足 「 nums 中的 最大 元素」至少出現 k 次的子數組&#xff0c;并返回滿足這一條件的子數組的數目。 子…

【Java SE】基于多態與接口實現圖書管理系統:從設計到編碼全解析

文章目錄一、系統整體設計&#xff1a;分層與職責劃分系統模塊結構二、核心模塊詳解&#xff1a;從數據到功能1. Book包&#xff1a;數據封裝1.1 Book類&#xff1a;圖書實體1.2 BookList類&#xff1a;書架管理2. User包&#xff1a;多態的核心體現2.1 User抽象類&#xff1a;…

ESP32-WSL開發環境搭建過程中遇到的問題及解決方案

文章目錄 應用場景: 問題1描述: 原因分析: 解決方案: 先檢查 ESP-IDF 工具鏈是否安裝完整 設定工具路徑變量一切正常: 執行重新運行安裝腳本后又報錯: 原因分析 解決方法: 第一步:安裝python3.10-venv包(核心修復) 第二步:重新執行 ESP-IDF 安裝腳本,重建虛擬環境 安…

SwiftUI 三陣訣:楊過絕情谷悟 “視圖布陣” 之道

&#x1f4dc; 引子&#xff1a;絕情谷困境&#xff0c;三陣待辨 絕情谷外&#xff0c;瘴氣彌漫。楊過手握玄鐵劍&#xff08;喻 Xcode&#xff09;&#xff0c;凝視谷中涌動的萬千 “毒物”&#xff08;喻待渲染的視圖元素&#xff09;&#xff0c;眉頭緊鎖。 此前他試過硬闖…

以樓宇自控系統為核心,整合多維度技術,打造智能建筑解決方案

在數字化浪潮席卷建筑行業的當下&#xff0c;“智能建筑” 已從概念走向大規模落地&#xff0c;其核心訴求不再是單一設備的智能化&#xff0c;而是建筑整體的 “感知、分析、決策、執行” 閉環能力。傳統智能建筑常陷入 “技術堆砌” 困境 —— 暖通、安防、照明等系統各自為政…

阿里云服務器 篇一(加更):設置二級域名通配符證書

文章目錄 樣例網站 系列文章 域名注冊 為單個域名添加SSL證書 申請 通配符域名 + 根域名 證書 已申請通配符證書,補申請一個根域名證書 更改Nginx配置,統一使用通配符域名證書 替換所有https服務的證書為通配符證書 統一處理http請求跳轉https服務 對所有未定義二級域名的統一…

汽車電子工廠靜電腕帶監控儀雙回路設計降低設備采購成本

在汽車電子制造中&#xff0c;靜電放電&#xff08;ESD&#xff09;風險貫穿從PCB焊接、元件裝配到成品測試的全流程。在新能源汽車零部件產線中需處理大量精密電子組件&#xff0c;靜電隱患導致的典型問題包括&#xff1a;元件損傷&#xff1a;ESD瞬時電壓可能擊穿芯片或導致焊…

Linux操作系統—進程

進程&#xff08;process&#xff09;&#xff1a;&#xff08;1&#xff09;進程的定義&#xff1a;正在進行的程序&#xff0c;會去分配內存資源(mem)&#xff0c;cpu的調度 &#xff0c;(flash ssd:固態硬盤)目的&#xff1a;為了實現并發&#xff0c;同一時刻執行多任務&am…