linux--------------進程控制(上)

1.進程創建

1.1fork函數初識

在linux中fork函數是?常重要的函數,它從已存在進程中創建?個新進程。新進程為?進程,?原進 程為?進程。

#include <unistd.h>
pid_t fork(void);
返回值:?進程中返回0,?進程返回?進程id,出錯返回-1
進程調?fork,當控制轉移到內核中的fork代碼后,內核做:
? 分配新的內存塊和內核數據結構給?進程
? 將?進程部分數據結構內容拷???進程
? 添加?進程到系統進程列表當中
? fork返回,開始調度器調度
當?個進程調?fork之后,就有兩個?進制代碼相同的進程。?且它們都運?到相同的地?。但每個進 程都將可以開始它們??的旅程,看如下程序
int main( void )
{
pid_t pid;
printf("Before: pid is %d\n", getpid());
if ( (pid=fork()) == -1 )perror("fork()"),exit(1);
printf("After:pid is %d, fork return %d\n", getpid(), pid);
sleep(1);
return 0;
}
運?結果:
[root@localhost linux]# ./a.out
Before: pid is 43676
After:pid is 43676, fork return 43677
After:pid is 43677, fork return 0
這?看到了三?輸出,??before,兩?after。進程43676先打印before消息,然后它有打印after。 另?個after消息有43677打印的。注意到進程43677沒有打印before,為什么呢?如下圖所?
所以,fork之前?進程獨?執?,fork之后,??兩個執?流分別執?。注意,fork之后,誰先執?完 全由調度器決定。

1.2 fork的返回值

fork()?是 Unix/Linux 系統創建新進程的系統調用,其特殊之處在于?"一次調用,兩次返回"

  • 在父進程中返回?子進程的 PID(>0)

  • 在子進程中返回?0

  • 出錯時返回?-1

1.3寫時拷貝

通常,??代碼共享,??再不寫?時,數據也是共享的,當任意??試圖寫?,便以寫時拷?的? 式各??份副本。具體?下圖
核心概念:
寫時拷貝是一種? 延遲內存復制?的優化策略,父子進程? 共享同一份物理內存,直到某個進程嘗試? 修改內存頁?時,操作系統才會進行實際復制
關于觸發寫實拷貝的條件是:
  1. CPU 觸發?頁錯誤(Page Fault)

  2. 內核檢查錯誤原因是否為 COW

  3. 分配新的物理頁,復制原頁內容

  4. 修改故障進程的頁表,指向新物理頁

  5. 恢復進程執行

1。4?fork調?失敗的原因
系統中有太多的進程
實際??的進程數超過了限制

2.終止進程

進程終?的本質是釋放系統資源,就是釋放進程申請的相關內核數據結構和對應的數據和代碼
2-1 進程退出場景
? 代碼運?完畢,結果正確
? 代碼運?完畢,結果不正確
? 代碼異常終?
2-2 進程常?退出?法
正常終?(可以通過 echo $? 查看進程退出碼):
1. 從main返回
2. 調?exit
3. _exit
2-2-1 退出碼
退出碼(退出狀態)可以告訴我們最后?次執?的命令的狀態。在命令結束以后,我們可以知道命令
是成功完成的還是以錯誤結束的。其基本思想是,程序返回退出代碼 0 時表?執?成功,沒有問題。
代碼 1 0 以外的任何代碼都被視為不成功。
Linux Shell 中的主要退出碼
2.3 exit函數

1. 標準庫函數 vs 系統調用

函數原型所屬標準關鍵差異
void exit(int status)C標準庫執行完整清理:刷新緩沖區、調用atexit注冊函數
void _exit(int status)POSIX系統調用直接終止進程,不執行I/O緩沖清理

資源回收關鍵機制

資源類型處理方式例外情況
文件描述符全部關閉
內存泄漏用戶態內存不會自動釋放需依賴OS內核回收
臨時文件未刪除的臨時文件保留需手動unlink
共享內存引用計數減1計數為0時才釋放

注意事項:

1. 多線程環境

  • 調用exit()會終止?整個進程(所有線程)

  • 替代方案:

    • pthread_exit()?終止當前線程

    • 主線程使用return退出

2. 信號處理沖突

  • 在信號處理函數中調用exit()是安全的

  • 避免在SIGKILL/SIGSTOP處理中操作(信號不可捕獲)

2-3-1?return退出
return是?種更常?的退出進程?法。執?return n等同于執?exit(n),因為調?main的運?時函數會 將main的返回值當做 exit的參數。

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

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

相關文章

windows免密SSH連接 ubuntu教程

文章目錄 前情提要step1. 在windows下生成SSH密鑰step2. SSH公鑰copy到ubuntu的~/.ssh/authorized_keys內step3. 修改文件權限&#xff08;這一步完成后就可以實現免密SSH連接了&#xff09; 前情提要 ubuntu下安裝SSH服務 sudo apt-get install openssh-serverwindows下安裝…

中級:數組算法面試題全解析

一、引言 在Java面試中&#xff0c;數組相關的算法題是考察候選人基礎算法能力的常見類型。面試官通過這些問題了解候選人在面對具體問題時的邏輯思維和代碼實現能力。本文將深入剖析常見的數組算法面試題&#xff0c;結合實際開發場景&#xff0c;幫助讀者全面掌握這些知識點…

《Linux運維實戰:Ubuntu 22.04配置pam實現密碼復雜度策略》

總結&#xff1a;整理不易&#xff0c;如果對你有幫助&#xff0c;可否點贊關注一下&#xff1f; 更多詳細內容請參考&#xff1a;Linux運維實戰總結 一、背景信息 由于安全方面的考慮&#xff0c;先要求Ubuntu 22.04系統需配置密碼復雜度策略&#xff0c;先要求如下&#xff1…

JavaScript數據結構

目錄 JavaScript數據結構 一、基礎數據結構 1. 數組&#xff08;Array&#xff09; 2. 對象&#xff08;Object&#xff09; 二、ES6 高級數據結構 1. Map 2. Set 3. WeakMap 與 WeakSet 三、類型化數組&#xff08;Typed Arrays&#xff09; 四、其他數據結構實現 …

魔改chromium——基礎環境搭建

谷歌chromium環境要求詳細文檔 軟件和環境要求&#xff0c;必須安裝&#xff0c;硬性要求 系統環境&#xff1a;Windows 10&#xff0c;內存最小8GB&#xff0c;推薦16GB&#xff0c;NTFS格式磁盤最少100GB空間Git版本&#xff1a;安裝最新版本即可&#xff0c;Git桌面端下載…

電子文檔安全管理系統V6.0接口backup存在任意文件下載漏洞

免責聲明&#xff1a;本號提供的網絡安全信息僅供參考&#xff0c;不構成專業建議。作者不對任何由于使用本文信息而導致的直接或間接損害承擔責任。如涉及侵權&#xff0c;請及時與我聯系&#xff0c;我將盡快處理并刪除相關內容。 漏洞描述 電子文檔安全管理系統 V6.0 reso…

5.3 MVVM模型

一、MVVM的基本概念 MVVM的基本概念&#xff1a;Model、View、ViewModel 組件職責示例內容Model封裝業務數據User類&#xff0c;包含姓名、年齡屬性View負責UI呈現XAML界面&#xff0c;包含數據綁定ViewModel連接View和Model&#xff0c;處理視圖邏輯MainViewModel包含命令和…

python采集淘寶拍立淘按圖搜索API接口,json數據示例參考

以下是關于淘寶拍立淘按圖搜索API接口的詳細說明及JSON數據示例&#xff1a; 一、接口概述 淘寶拍立淘按圖搜索API接口是淘寶開放平臺提供的一項基于圖像識別技術的服務&#xff0c;允許開發者通過上傳商品圖片&#xff0c;獲取與圖片相似或相同的商品列表。該接口廣泛應用于…

每天學一個 Linux 命令(8):ls

大家好,歡迎來到《每天掌握一個Linux命令》系列。在這個系列中,我們將逐步學習并熟練掌握Linux命令,今天,我們要學習的命令是ls。 01 什么是ls命令 在Linux系統中,ls命令是“list”的縮寫,其英文全稱為“list directory contents”,即“列出目錄內容”。該命令非常實用…

00.【Linux系統編程】 Linux初識(云服務器設置CentOS并使用、Xshell鏈接云服務器)

目錄 一、華為云服務器免費體驗申請 二、Xshell遠程鏈接創建好的華為云服務器 2.1 下載Xshell 2.2 Xshell遠程連接華為云服務器 一、華為云服務器免費體驗申請 華為云官網 1. 進入華為云官網&#xff0c;最上面一欄點活動&#xff0c;并進入免費體驗中心。 2. 找到含有“…

arm非對齊訪問編譯器選項

gcc編譯選項&#xff1a; -munaligned-access gcc編譯選項&#xff1a; -mno-unaligned-access Enables (or disables) reading and writing of 16- and 32- bit values from addresses that are not 16- or 32- bit aligned. By default unaligned access is disabled for…

jmeter線程組高并發(詳細講解)

在 JMeter 中&#xff0c;線程組是測試計劃的核心組件&#xff0c;用于定義虛擬用戶&#xff08;線程&#xff09;的行為。線程組的屬性決定了測試的并發用戶數、加載速度、運行時間等。以下是線程組屬性的詳細講解&#xff1a; 1. 名稱&#xff08;Name&#xff09; 定義&…

vs2022中使用spdlog、C++日志

spdlog::set_level(spdlog::level::info); // 只顯示info及比info高級的信息&#xff0c;trace 和 debug 不顯示 參考&#xff1a;Windows10中使用VS2022和Cmake編譯構建C開源日志庫-spdlog-騰訊云開發者社區-騰訊云 spdlog C日志管理 | 快速上手教程 - 知乎 1.按照上述步驟…

SOME/IP-SD -- 協議英文原文講解10

前言 SOME/IP協議越來越多的用于汽車電子行業中&#xff0c;關于協議詳細完全的中文資料卻沒有&#xff0c;所以我將結合工作經驗并對照英文原版協議做一系列的文章。基本分三大塊&#xff1a; 1. SOME/IP協議講解 2. SOME/IP-SD協議講解 3. python/C舉例調試講解 5.1.5 Non…

STM32 ADC轉換完成回調函數詳解 HAL_ADC_ConvCpltCallback與HAL_ADC_ConvHalfCpltCallback

HAL_ADC_ConvCpltCallback 和 HAL_ADC_ConvHalfCpltCallback 是 STM32 HAL 庫中用于處理 ADC&#xff08;模數轉換器&#xff09;轉換完成事件的回調函數。它們分別在 ADC 轉換完成和轉換完成一半時被調用。以下是它們的詳細說明&#xff1a; 1. HAL_ADC_ConvCpltCallback 功能…

Android OpenGLES 360全景圖片渲染(球體內部)

概述 360度全景圖是一種虛擬現實技術&#xff0c;它通過對現實場景進行多角度拍攝后&#xff0c;利用計算機軟件將這些照片拼接成一個完整的全景圖像。這種技術能夠讓觀看者在虛擬環境中以交互的方式查看整個周圍環境&#xff0c;就好像他們真的站在那個位置一樣。在Android設備…

代碼隨想錄算法訓練營第三十二天 | 509.斐波那契數 70.爬樓梯 746.使用最小花費爬樓梯

509. 斐波那契數 題目鏈接&#xff1a;509. 斐波那契數 - 力扣&#xff08;LeetCode&#xff09; 文章講解&#xff1a;代碼隨想錄 視頻講解&#xff1a;手把手帶你入門動態規劃 | LeetCode&#xff1a;509.斐波那契數_嗶哩嗶哩_bilibili 思路&#xff1a;輸入&#xff1a;…

拼多多 anti-token unidbg 分析

聲明: 本文章中所有內容僅供學習交流使用&#xff0c;不用于其他任何目的&#xff0c;抓包內容、敏感網址、數據接口等均已做脫敏處理&#xff0c;嚴禁用于商業用途和非法用途&#xff0c;否則由此產生的一切后果均與作者無關&#xff01; 逆向分析 版本7.3-7.4 都試過加密沒什…

【工具】BioPred一個用于精準醫療中生物標志物分析的 R 軟件包

介紹 R 語言包 BioPred 提供了一系列用于精準醫療中的亞組分析和生物標志物分析的工具。它借助極端梯度提升&#xff08;XGBoost&#xff09;算法&#xff0c;并結合傾向得分加權和 A 學習方法&#xff0c;幫助優化個體化治療規則&#xff0c;從而簡化亞組識別過程。BioPred 還…

橫掃SQL面試——時間序列分組與合并(會話劃分)問題

橫掃SQL面試題 &#x1f4cc; 時間序列分組與合并問題 &#x1f4da; 橫掃SQL面試——時間序列分組與合并解析 &#x1f31f; 核心問題類型 時間序列分組&#xff08;Sessionization&#xff09; 處理具有時間維度的連續數據流&#xff0c;根據特定規則&#xff08;如時間間隔…