進程地址空間

引入地址空間

靜態變量和棧空間變量

在這里插入圖片描述

在這里插入圖片描述
在這里插入圖片描述

靜態變量默認是被初始化的
存放在初始化和為初始化空間中
static已經變成了全局變量

命令行參數和環境變量的增長方向

這里觀察的是命令行參數環境變量的地址
在這里插入圖片描述
在這里插入圖片描述


觀察命令行和環境變量表的地址
在這里插入圖片描述
在這里插入圖片描述

進程地址空間

在這里插入圖片描述

在這里插入圖片描述

如果他們是同一塊兒空間,為什么打印的結果卻不一樣呢,我們知道肯定是父進程先跑完,在子進程進程輸出的時候a應該是1才對——我們看到的只是虛擬地址空間


在這里插入圖片描述

1.子進程是父進程的拷貝,(父子進程代碼和數據是共享的,只有在數據進行改變時才進行寫時拷貝,子進程繼承父進程的pcb里的大部分內容,地址空間,頁表,并且繼承的時候每個頁表對應的權限默認為只讀的狀態)他們通過頁表進行映射到物理內存,物理內存由操作系統進行管理
2.因為進程之間是獨立的,他們本來對應的是相同的物理內存,但是當有一方進行改變的時候,就需要將發生改變的那一方進行拷貝(寫時拷貝),更改頁表的指向,指向新的物理空間


頁表是有權限的

對數據的權限限制有r,w,rw,一般默認為r
在這里插入圖片描述
在這里插入圖片描述
字符串存在常量區,權限是只讀的,操作系統檢測到要修改變量,就會產生報錯


在這里插入圖片描述

在這里插入圖片描述

加const是為了增強代碼的安全性,錯誤早發現早處理


在父進程數據拷貝給子進程的時候,會將頁表權限rw->r,因為子進程是父進程的拷貝,頁表也會單獨有一份,父進程和子進程的頁表都會發生改變;當其中有一方進行修改數據,但是檢測到頁表對應的數據是只讀的,此時os將介入,重新開辟空間,將原來的數據拷貝過來,再進行修改,完成后權限就會到了rw(缺頁中斷)

進程終止

進程退出狀態:
1:代碼執行完,結果正確
2:代碼執行完,結果錯誤
3:代碼沒執行完,進程異常
只有代碼執行完的退出結果才是有意義的


主函數退出——退出碼

進程終止會有一個返回值(return)——表示退出情況,0表示成功,非0表示失敗發生錯誤
使用echo $?觀察最后一次退出情況

在這里插入圖片描述

第一次:139表示出錯
第二三次:0表示正常退出
因為這個命令記錄的是最后一次的退出情況,我們明白命令也是一種程序,echo是正常運行的,所以返回0


其他函數退出——錯誤碼

調用庫函數,錯誤碼錯誤碼保存在errno
調用自己的函數,普通函數的返回值一般表示的是函數的結果,特殊情況下,錯誤碼需要自己設置
在這里插入圖片描述
在這里插入圖片描述
通過errno的方式觀察庫函數的錯誤碼


進程異常

本質:收到異常信號
在這里插入圖片描述
每種信號都是一個宏,每個信號都是不一樣的


exit & _exit

exit是庫函數
_exit是系統調用
在這里插入圖片描述
exit中的參數表示返回的退出碼

_exit不會刷新緩沖區
在這里插入圖片描述

在這里插入圖片描述
exit會刷新緩沖區
在這里插入圖片描述
在這里插入圖片描述

證明緩沖區不是在系統中的

進程等待

在這里插入圖片描述

wait

等待任意一個進程
父進程等不到就卡死
在這里插入圖片描述
我們能看到,父進程一直在等待,子進程一直在運行


waitpid

等待特定的pid在這里插入圖片描述在這里插入圖片描述

exit的參數是1可是為什么status返回的是256呢
在這里插入圖片描述
status存的信息是錯誤碼+信號


父進程和子進程fork之后誰先運行取決于調度器

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

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

相關文章

Ubuntu22.04 交叉編譯fdk-aac for Rv1106

一、下載fdk-aac git clone https://github.com/mstorsjo/fdk-aac.git 二、編譯 mkdir build cd buildcmake -DCMAKE_CXX_COMPILER/opt/arm-rockchip830-linux-uclibcgnueabihf/bin/arm-rockchip830-linux-uclibcgnueabihf-g -DCMAKE_C_COMPILER/opt/arm-rockchip830-linux-…

軟件測試——集成測試

集成測試是在單元測試之后,將各個獨立單元(通常是已經通過單元測試的模塊或組件)組合在一起,測試它們在一起協同工作的過程。以下是進行集成測試的一般步驟和最佳實踐: 1. 明確定義集成測試的目標 確定集成測試的目標…

麒麟v10 數據盤初始化 gpt分區

麒麟v10 數據盤初始化 gpt分區 1、查看磁盤 lsblk2 、分區 parted2.1、 設置磁盤分區形式2.2、 設置磁盤的計量單位為磁柱2.3、 分區2.4、 查看分區 3、分區格式化4、 掛載磁盤4.1、新建掛載目錄4.2、掛載磁盤4.3、查看掛載結果 5、設置開機自動掛載磁盤分區5.1、 查詢磁盤分區…

ClamAV開源病毒庫使用例子

ClamAV是一個開源的反病毒引擎,用于檢測惡意軟件和病毒。ClamAV提供了一個名為cl_scanfile的函數,用于掃描單個文件是否包含病毒。以下是一個使用cl_scanfile函數的示例代碼: 首先,確保已經安裝了ClamAV庫。在Debian/Ubuntu系統中…

用AI來糾正錯別字和修飾文字

▲ 搜索“大龍談智能內容”關注GongZongHao▲ 在使用谷歌翻譯或百度翻譯將英語翻譯成中文時,有些句子讀起來不太流暢。我嘗試使用AI來幫助我修改翻譯后的中文,希望能讓句子更符合中文習慣。 使用百度文心一言嘗試一下。 文心一言的鏈接是這個&#x…

VUE3給table的head添加popover篩選、時間去除時分秒、字符串替換某字符

1. VUE3給table的head添加popover篩選 <el-tableref"processTableRef"class"process-table"row-key"secuId":data"pagingData"style"width: 100%"highlight-current-row:height"stockListHeight":default-exp…

RHEL/CentOS的firewalld防火墻服務配置

從 RHEL/CentOS 7開始&#xff0c;使用新的防火墻服務——firewalld。這里介紹該防火墻服務的基本用法 一、防火墻服務管理&#xff1a;從 RHEL/CentOS 7開始采用Systemd作為新的系統管理器&#xff0c;而systemctl則是Systemd中用于管理服務的命令 # 啟動防火墻服務 systemct…

谷歌Gemini剛發就惹質疑:測試標準有失偏頗,效果視頻疑似剪輯

夢晨 克雷西 發自 凹非寺 量子位 | 公眾號 QbitAI 谷歌憋了許久的大招&#xff0c;雙子座Gemini大模型終于發布&#xff01;其中一圖一視頻最引人注目&#xff1a; 一圖&#xff0c;MMLU多任務語言理解數據集測試&#xff0c;Gemini Ultra不光超越GPT-4&#xff0c;甚至超越了…

OpenGL學習資料

1.學習網站 Song Ho Ahn LearnOpenGL GAMES101:現代計算機圖形學入門 OpenGL 官網 2.書籍 Fundamentals of computer graphics OpenGL ES 3.0編程指南 計算機圖形學(OpenGL版)第3版 3.參考的一些文章 顏色緩沖區 深度緩沖 VBO&#xff0c;VAO和EBO詳解 深入探索透視投影變…

實戰干貨!基于ERNIE Bot SDK的數字詩人聊天開發教程

隨著人工智能技術的不斷迭代發展&#xff0c;數字人的開發與應用需求也與日俱增&#xff0c;并且隨著大語言模型的發展&#xff0c;數字人也更智能&#xff0c;從最初的語音預制到現在的實時交流&#xff0c;目前已在很多場景都有廣泛應用。 虛擬客服&#xff1a;數字人可以通…

Mysql自動備份腳本(本地備份、遠程備份、刪除冗余備份)

Mysql自動備份腳本&#xff08;本地備份、遠程備份、刪除冗余備份&#xff09; 1. 腳本功能 自動備份mysql數據到服務器上&#xff0c;可以通過linux的 crontab定義備份周期。 自動刪除七天前的備份數據。 2. 腳本內容 #!/bin/bash # auth Eric source /etc/profile # 設…

【EMNLP 2023】基于知識遷移的跨語言機器閱讀理解算法

近日&#xff0c;阿里云人工智能平臺PAI與華南理工大學朱金輝教授團隊、達摩院自然語言處理團隊合作在自然語言處理頂級會議EMNLP2023上發表基于機器翻譯增加的跨語言機器閱讀理解算法X-STA。通過利用一個注意力機制的教師來將源語言的答案轉移到目標語言的答案輸出空間&#x…

計算機網絡高頻面試八股文

目錄&#xff1a; 網絡分層結構三次握手兩次握手可以嗎&#xff1f;四次揮手第四次揮手為什么要等待2MSL&#xff1f;為什么是四次揮手&#xff1f;TCP有哪些特點&#xff1f;說說TCP報文首部有哪些字段&#xff0c;其作用又分別是什么&#xff1f;TCP和UDP的區別&#xff1f;…

套接字應用程序

這章節是關于實現 lib_chan 庫的 。 lib_chan 的代碼在 TCP/IP 之上實現了一個完整的網絡層&#xff0c;能夠提供認證和Erlang 數據流功能。一旦理解了 lib_chan 的原理&#xff0c;就能量身定制我們自己的通信基礎結構&#xff0c;并把它疊加在TCP/IP 之上了。 就lib_chan 本身…

MMLM之Gemini:《Introducing Gemini: our largest and most capable AI model》的翻譯與解讀

MMLM之Gemini&#xff1a;《Introducing Gemini: our largest and most capable AI model》的翻譯與解讀 導讀&#xff1a;2023年12月6日&#xff0c;Google重磅發布大規模多模態模型Gemini&#xff0c;表示了Google語言模型發展到了一個新階段&#xff0c;其多模態和通用能力明…

中斷、異常和系統調用(2-1,2-2,2-3)

2-1 課堂練習2.1&#xff1a;外部中斷 本實訓分析 Linux 0.11 對外部中斷的響應和處理過程。在每條指令執行的末尾&#xff0c;如果沒有關中斷&#xff0c;CPU 會檢查是否收到了外部中斷信號&#xff0c;如果有信號&#xff0c;則 CPU 就切換到核心態去執行對應的中斷處理程序…

Android 獲取進程名稱

Android 獲取進程名稱 本篇文章主要獲取下當前應用的進程名稱,具體代碼如下: public static String getProcessNameDevice(final Context context) {int myPid Process.myPid();if (context null || myPid < 0) {return "";}ActivityManager.RunningAppProces…

DHTMLX Scheduler PRO 6.0.5 Crack

功能豐富的 JavaScript調度程序 DHTMLX Scheduler 是一個 JavaScript 日程安排日歷&#xff0c;具有 10 個視圖和可定制的界面&#xff0c;用于開發任何類型的日程安排應用程序。 DHTMLX JS 調度程序庫的主要特性 我們的 JS 調度程序最需要的功能之一是時間軸視圖。借助時間軸…

vue-loader是如何工作的?

什么是單文件組件&#xff1f; 單文件組件是一種將模板、腳本和樣式封裝在一個 .vue 文件中的方式 例如&#xff1a; <template><div class"example">{{ msg }}</div> </template> <script>export default {data() {return {msg: &qu…

【語義分割數據集】——imagenet語義分割

地址&#xff1a;https://github.com/LUSSeg/ImageNet-S 1 例圖 2. 類別和數量信息 疑問 根據原文的描述&#xff1a;Based on the ImageNet dataset, we propose the ImageNet-S dataset with 1.2 million training images and 50k high-quality semantic segmentation annot…