Linux學習-軟件編程(進程與線程)

進程回收

wait

原型:pid_t wait(int *wstatus);
功能:回收子進程空間
參數:wstatus:存放子進程結束狀態空間的首地址
返回值:成功返回回收到的子進程的PID失敗返回-1WIFEXITED(wstatus):測試進程是否正常結束
WEXITSTATUS(wstatus):獲得進程退出的值
WIFSIGNALED(wstatus):測試進程是否被殺死
WTERMSIG(wstatus):獲得殺死進程的編號
  • wait具有阻塞等待的功能,等到有子進程結束才會回收子進程繼續向下執行
  • wait可以實現多任務得到同步

waitpid

原型:pid_t waitpid(pid_t pid, int *wstatus, int options);
功能:回收指定的子進程空間
參數:pid:要回收的進程的PID(-1表示回收任意子進程)wstatus:存放子進程結束狀態空間首地址options:0    阻塞回收WNOHANG    非阻塞回收
返回值:成功返回回收到的子進程PID失敗返回-1指定的子進程空間未結束,返回0waitpid(-1, NULL,0)等價于wait(NULL)
  • waitpid可以非阻塞回收子進程空間
  • waitpid可以回收指定子進程空間

1.exec函數族

1.1 exec函數族

  • 利用進程空間執行另一份代碼
  • exec常搭配fork使用,fork創建新的子進程,exec讓子進程執行自己的代碼
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[]);l:參數以列表的形式傳遞
p:在系統變量PATH對應的目錄下查找文件
v:參數以指針數組的形式傳遞
e:執行新代碼是更新環境變量

1.2 主函數傳參

主函數形式

void main(void);
int main(void);
int main(int argc, const char *argv[]);
int main(int argc, const char **argv);argc:傳入參數的個數
argv:存放每一個傳入參數指針的數組名argv[0] = "./a.out"
argv[1] = "hello"
argv[2] = "world"
argv[3] = "how"
argv[...] = ...
argv[argc] = ...

1.3 sytem函數

原型:int system(const char *command);
功能:在代碼運行command命令
參數:command:shell命令字符串首地址
返回值:成功返回0失敗返回-1

2.線程

2.1 基本概念

線程是一個輕量級的進程

  • 線程本質就是一個進程
  • 線程和進程不完全一致,輕量指空間,進程空間和線程空間空間管理方法不同

2.2 進程和線程的區別

  • 線程本質是進程,線程是任務創建、調度、回收的過程
  • 進程空間:文本段 + 數據段 + 系統數據段
  • 線程空間:

1.線程必須位于進程空間內部,沒有進程,線程無法獨立存在

2.一個進程中的所有線程共享文本段 + 數據段 + 堆區,獨享棧區

3.線程獨享的棧區默認8M

4.一個進程中的多個線程切換調度任務時,資源開銷少

  • 進程和線程的區別

1.線程是CPU任務調度的最小單元

2.進程是操作系統資源分配的最小單元

2.3 多進程和多線程的優缺點

1.多線程和多進程對比:

場景多進程多線程對比
效率多進程切換需要重新映射物理地址,占用資源開銷較大多線程在同一進程空間內部切換任務,占用資源開銷較小多線程 > 多進程
通信多進程沒有共享空間,需要使用進程間通信的方法來完成通信多線程有共享空間,只需要定義共享空間變量完成數據交換即可實現通信多線程 > 多進程
資源競爭多進程沒有共享空間,不存在資源競爭多線程使用共享空間,需保證資源使用的互斥性,防止多線程對共享資源產生競爭多進程 > 多線程
安全多進程空間獨立,一個進程的崩潰不會影響其余進程多線程共用一個進程空間,一個線程異常崩潰,可能引發進程異常退出,導致其余線程也無法執行多進程 > 多線程

2.4 線程的調度

與進程調度保持一致

宏觀并行,微觀串行

2.5 線程的消亡

線程結束需要回收線程空間,否則會產生僵尸線程

2.6 線程的函數接口

1.函數接口

進程接口線程接口
forkpthread_creat
exitpthread_exit
waitpthread_join

pthread_creat

原型:int pthread_create(pthread_t *thread, const pthread_attr_t *attr,void *(*start_routine) (void *), void *arg);
功能:在進程中創建一個線程
參數:thread:存放線程ID空間的首地址attr:線程的屬性,默認屬性NULLstart_routine:線程函數的入口arg:線程傳入的參數
返回值:成功返回0失敗返回錯誤碼

pthread_self

原型:pthread_t pthread_self(void);
功能:獲得調用該函數的ID號

pthread_exit

原型:void pthread_exit(void *retval)
功能:結束當前線程任務
參數:retval:線程結束的值

pthread_join

原型: int pthread_join(pthread_t thread, void **retval);
功能:回收線性空間
參數:thread:要回收的線程的IDretval:存放線程結束狀態空間的首地址
返回值:成功返回0失敗返回錯誤碼
  • tid對應的線程只要不退出,pthread_join 阻塞等待結束回收線程空間
  • pthread_join具備同步的功能

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

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

相關文章

大模型微調分布式訓練-大模型壓縮訓練(知識蒸餾)-大模型推理部署(分布式推理與量化部署)-大模型評估測試(OpenCompass)

大模型微調分布式訓練 LLama Factory與Xtuner分布式微調大模型 大模型分布式微調訓練的基本概念 為什么需要分布式訓練? 模型規模爆炸:現代大模型(如GPT-3、LLaMA等)參數量達千億級別,單卡GPU無法存儲完整模型。 …

物聯網、大數據與云計算持續發展,樓宇自控系統應用日益廣泛

在深圳某智慧園區的控制中心,管理人員通過云端平臺實時監控著5公里外園區內每臺空調的運行參數、每盞路燈的開關狀態和每個區域的能耗數據。當系統檢測到某棟樓宇的電梯運行振動異常時,大數據算法自動預判可能的故障點并推送維修建議;物聯網傳…

在實驗室連接地下車庫工控機及其數據采集設備

在實驗室連接地下車庫工控機及其數據采集設備 我們小組為項目的數據采集組,目前在車頂集成了一個工控機、兩個激光雷達、兩個攝像頭、一個戶外電源 由于地下車庫蚊子太多了,我們可受不了這個苦,所以想坐在實驗室吹著空調就能連接工控機來修改…

icmpsh、PingTunnel--安裝、使用

用途限制聲明,本文僅用于網絡安全技術研究、教育與知識分享。文中涉及的滲透測試方法與工具,嚴禁用于未經授權的網絡攻擊、數據竊取或任何違法活動。任何因不當使用本文內容導致的法律后果,作者及發布平臺不承擔任何責任。滲透測試涉及復雜技…

系統思考:情緒內耗與思維模式

我們正在努力解決的問題,很多時候,根源就在我們自己。 在日常的工作和生活中,我們常常感到焦慮、內耗和失控。這些情緒和狀態,似乎總是在不斷循環。但如果停下來仔細思考,會發現,問題的背后,并不…

詳解grafana k6 中stage的核心概念與作用

在Grafana k6中,??Stage(階段)?? 是負載測試腳本的核心配置概念,用于動態控制虛擬用戶(VUs)的數量隨時間的變化。通過定義多個階段,用戶可以模擬真實場景中的流量波動(如用戶逐步…

JS 和 JSX 的區別

JS 和 JSX 是兩種不同的概念,盡管它們都與 JavaScript 密切相關,尤其是在 React 開發中。以下是它們的主要區別:1. 定義JS (JavaScript): 一種通用的編程語言,用于開發動態網頁、服務器端應用程序等。它是標準的 ECMAScript 語言。…

Linux軟件編程-進程(2)及線程(1)

1.進程回收資源空間&#xff08;1&#xff09;wait函數頭文件&#xff1a;#include <sys/types.h>#include <sys/wait.h>函數接口&#xff1a;pid_t wait(int *wstatus);功能&#xff1a;阻塞等待回收子進程的資源空間參數&#xff1a;wstatus &#xff1a;保存子進…

java 集合 之 集合工具類Collections

前言早期開發者經常需要對集合進行各種操作比如排序、查找最大最小值等等但是當時沒有統一的工具類來處理所以導致代碼重復且容易出錯java.util.Collections 工具類的引入為開發者提供了大量 靜態方法 來操作集合它就像一個經驗豐富的助手和數組工具類 Arrays 一樣避免了我們重…

2025 年電賽 C 題 發揮部分 1:多正方形 / 重疊正方形高精度識別與最小邊長測量

2025 年全國大學生電子設計競賽 C 題 發揮部分 1&#xff1a;多正方形 / 重疊正方形高精度識別與最小邊長測量 香橙派 OpenCV C 全流程解析 目錄 賽題背景與需求技術難點全景圖系統總體架構硬件平臺與接線軟件架構與線程模型算法流水線逐幀拆解 6.1 圖像預處理6.2 輪廓提取與…

【自動駕駛】自動駕駛概述 ② ( 自動駕駛技術路徑 | L0 ~ L5 級別自動駕駛 )

文章目錄一、自動駕駛技術路徑1、L0 級別 自動駕駛2、L1 級別 自動駕駛3、L2 級別 自動駕駛4、L3 級別 自動駕駛5、L4 級別 自動駕駛6、L5 級別 自動駕駛一、自動駕駛技術路徑 美國汽車工程師學會 ( SAE ) 將 自動駕駛 分為 L0 ~ L5 六個級別 : 其中 L0 級別 是 完全手動 , L5…

C++少兒編程(二十二)—條件結構

1.理解條件結構小朋友們&#xff0c;今天讓我們一起來探索一個神奇而有趣的知識——程序的條件結構&#xff01;首先&#xff0c;讓我們來想象一個有趣的場景。比如說&#xff0c;你們正在準備去公園玩耍。在出發之前&#xff0c;你們會看看天氣怎么樣。如果天氣晴朗&#xff0…

Ubuntu20.04下Px4使用UORB發布消息

1 .msg文件夾定義數據類型及 變量名文件位置如圖&#xff0c;在PX4-Autopilot/msg文件夾下&#xff0c;筆者創建的文件名為gps_msg.msggps_msg.msg內容如下 uint64 timestamp # 時間戳 float32 latitude float32 longitude float32 altitude 同時&#xff0c;在CM…

three.js學習記錄(第二節:鼠標控制相機移動)

效果展示&#xff1a; 鼠標控制一、鼠標控制 - 軌道控制器&#xff08;OrbitControls&#xff09; 1. 從nodeModules中導入OrbitControls&#xff0c;OrbitControls 是一個附加組件&#xff0c;必須顯式導入 import { OrbitControls } from "three/examples/jsm/controls/…

Shortest Routes II(Floyd最短路)

題目描述There are n cities and m roads between them. Your task is to process q queries where you have to determine the length of the shortest route between two given cities.輸入The first input line has three integers n, m and q: the number of cities, roads…

分享一個基于Hadoop的二手房銷售簽約數據分析與可視化系統,基于Python可視化的二手房銷售數據分析平臺

&#x1f495;&#x1f495;作者&#xff1a;計算機源碼社 &#x1f495;&#x1f495;個人簡介&#xff1a;本人八年開發經驗&#xff0c;擅長Java、Python、PHP、.NET、Node.js、Spark、hadoop、Android、微信小程序、爬蟲、大數據、機器學習等&#xff0c;大家有這一塊的問題…

STM32的PWM

PWM作為硬件中幾乎不可或缺的存在&#xff0c;學會 PWM&#xff0c;等于打通了 STM32 的“定時器體系”。學一次&#xff0c;STM32 全系列&#xff08;甚至 AVR、PIC、ESP32&#xff09;都能通用。硬件只要一個 I/O 就能驅動功率模塊&#xff0c;非常省成本。不會 PWM&#xff…

OpenCompass傻瓜式入門教程

文章目錄1 我也許不是傻瓜&#xff0c;卻只想做個傻瓜2 環境要求3 安裝3.1 下載源碼3.2 創建虛擬環境3.3 安裝4 下載數據5 查看支持的模型和數據集6 評測6.1 指定模型路徑6.2 指定配置文件6.2.1 評測本地qwen2.5模型6.2.1.1 查看opencompass支持的qwen2.5模型6.2.1.2 創建配置文…

【軟件測試】電商購物項目-各個測試點整理(三)

目錄&#xff1a;導讀 前言一、Python編程入門到精通二、接口自動化項目實戰三、Web自動化項目實戰四、App自動化項目實戰五、一線大廠簡歷六、測試開發DevOps體系七、常用自動化測試工具八、JMeter性能測試九、總結&#xff08;尾部小驚喜&#xff09; 前言 1、優惠券的測試點…

流處理、實時分析與RAG驅動的Python ETL框架:構建智能數據管道(上)

> **2025年某電商大促,每秒20萬訂單涌入系統**——他們的風控團隊僅用**47毫秒**就識別出欺詐交易。背后的秘密武器,正是融合流處理、實時分析與RAG的下一代Python ETL框架。 ### 一、范式革命:從批處理到AI增強的ETL 4.0 #### 1.1 數據處理演進史 ```mermaid graph LR …