波奇學Linux:父子進程和進程狀態

vim編輯器,編寫一個程序模擬進程

?在vim中查看sleep函數

底行模式輸入

?寫個Makefile自動運行波奇學Linux:yum和vim-CSDN博客

運行程序

?PID和PPID

查看進程目錄信息

實際有過濾出來有兩個,一個進程本身一個是grep程序,通過 -v grep過濾走含grep的進程。

?目錄中的PID相當于進程的唯一標識符。就是給進程分配一個號碼,這個數字和進程之間是一一對應的。

PID是進程的屬性,那么PID是在 struct task_struct結構體中。

task_struct(波奇學Linux:馮諾依曼和進程-CSDN博客)

????????

?ps ajx本質是就是遍歷雙向鏈表。

?而PPID是該進程的父進程的編號

查看父進程信息,可知父進程是-bash命令行

當xhell打開時會運行bash進程,而每個命令行command都是bash的子進程?。

因此當make 時命令行會創建子進程來啟動程序。

kill 指令 關閉進程

輸入指令kill -9 PID 關閉進程

?

?getpid()和getppid()返回進程的PID和PPID,證明PID確實是進程PCB的屬性

查看函數信息可以用命令行!man查看

PID和PPID剛好吻合?

?

fork創建子進程

?

編寫程序

第二號的after line打印兩遍的原因是fork創建了一個子線程,子線程運行了一遍printf("after line\n");?

fork會返回兩次,創建子進程成功,返回子進程的PID給父進程,返回0給子進程

?

說明確實父子進程同時運行?。

初步理解fork的原理

代碼的執行流是從上往下的,遇到fork函數時一份為二。

?fork函數內部構拷貝一份父線程的task_struct,子線程指向父線程的代碼,因此子父線程共享代碼。

子父線程相對獨立,不共享數據。因此父線程寫時拷貝數據給子線程。當子線程要修改父線程的變量時,會把變量拷貝一份,開辟空間給子線程。既避免了浪費空間還避免子線程修改父線程的變量。

fork return兩次,因此一般fork下要分流,分出父子線程。

父進程和子進程誰先運行是由調度器決定的。

bash創建子進程,底層調用了fork

進程狀態:運行,阻塞,掛起

運行

運行一個進程會把進程放入一個運行隊列 runqueue?

通過控制task_struct指針來控制進程的運行先后,每個進程都有一個時間片的概念

并且有個時間片如10ms,比如這個進程一可能運行10ms。

并發執行:在一段時間內所有的在隊列中的進程都會運行。

處于運行隊列的進程為R態:隨時被調度。
把進程從cpu上拿下來或者放上去,進程切換。

阻塞:離開運行隊列,進程進入等待隊列。

某個進程(比如含有scanf的語句)必須從外設從獲取 數據輸入時,才能繼續運行,那么他就進入阻塞狀態,如果同時有其他進程也要獲得數據,他們會從運行隊列中脫離出來進入等待隊列中,知道獲取數據。阻塞就是暫停,直到某個條件達成后再繼續運行。

等待隊列的進程處于阻塞狀態,阻塞隊列有n個,運行隊列只能有一個(1個cpu)

喚醒:就是從阻塞狀態轉為R態,重新進入運行隊列。

掛起:數據暫時進入磁盤中

阻塞掛起:當操作系統內存嚴重不足時,處于等待隊列的進程會把數據從內存加載到磁盤,只留下pcb。此時進程被掛起,當進程喚醒時。又從磁盤加載數據到內存。

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

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

相關文章

新版Android Studio 正則表達式匹配代碼注釋,刪除注釋,刪除全部注釋,IntelliJ IDEA 正則表達式匹配代碼注釋

正則表達式匹配代碼注釋 完整表達式拼接Android Studio 搜索匹配【IntelliJ IDEA 也是一樣的】 完整表達式拼接 (/*{1,2}[\s\S]?*/)|(//[\x{4e00}-\x{9fa5}].)|(<!-[\s\S]?–>)|(^\s\n)|(System.out.println.*) 表達式拆解&#xff0c;可以根據自己需求自由組合&#x…

Mybatis、Mybatis整合Spring的流程圖

Mybatis 注意MapperProxy里面有invoke方法&#xff0c;當進到invoker方法會拿到 二、mybatis整合Spring 1、當我們的拿到的【Dao】其實就是【MapperProxy】&#xff0c;執行Dao的方法時&#xff0c;會被MapperProxy的【Invoke方法攔截】 2、圖上已經標注了MapperProxy包含哪些…

力扣:200. 島嶼數量(Python3)

題目&#xff1a; 給你一個由 1&#xff08;陸地&#xff09;和 0&#xff08;水&#xff09;組成的的二維網格&#xff0c;請你計算網格中島嶼的數量。 島嶼總是被水包圍&#xff0c;并且每座島嶼只能由水平方向和/或豎直方向上相鄰的陸地連接形成。 此外&#xff0c;你可以假…

STM32-TIM定時器中斷

目錄 一、TIM&#xff08;Timer&#xff09;定時器簡介 二、定時器類型 2.1基本定時器結構 2.2通用定時器結構 2.3高級定時器結構 三、定時中斷基本結構 四、時序圖分析 4.1 預分頻器時序 4.2 計數器時序 4.3 計數器無預裝時序&#xff08;無影子寄存器&#xff09; …

C#的線程技術及操作

每個正在操作系統上運行的應用程序都是一個進程&#xff0c;一個進程可以包括一個或多個線程。線程是操作系統分配處理器時間的基本單元&#xff0c;在進程中可以有多個線程同時執行代碼。每個線程都維護異常處理程序、調度優先級和一組系統用于在調度該線程前保存線程上下文的…

PyQt6 水平布局Horizontal Layout (QHBoxLayout)

鋒哥原創的PyQt6視頻教程&#xff1a; 2024版 PyQt6 Python桌面開發 視頻教程(無廢話版) 玩命更新中~_嗶哩嗶哩_bilibili2024版 PyQt6 Python桌面開發 視頻教程(無廢話版) 玩命更新中~共計41條視頻&#xff0c;包括&#xff1a;2024版 PyQt6 Python桌面開發 視頻教程(無廢話版…

[足式機器人]Part2 Dr. CAN學習筆記-自動控制原理Ch1-1開環系統與閉環系統Open/Closed Loop System

本文僅供學習使用 本文參考&#xff1a; B站&#xff1a;DR_CAN Dr. CAN學習筆記-自動控制原理Ch1-1開環系統與閉環系統Open/Closed Loop System EG1: 燒水與控溫水壺EG2: 蓄水與最終水位閉環控制系統 EG1: 燒水與控溫水壺 EG2: 蓄水與最終水位 h ˙ q i n A ? g h A R \dot{…

阿里云SLS采集jvm日志

一、背景 java應用部署在阿里云的k8s容器里&#xff0c;采集其日志的需求則是一個不可缺少的。而不同公司的jvm日志會存在很大的差異&#xff0c;所以本文僅以我的實際情況作一個示例&#xff0c;僅供有需要采集jvm日志的同學們一個參考。 我們打印的Jvm日志格式見下&#xf…

【干貨分享】KingIOServer與三菱PLC的通訊的應用案例

哈嘍&#xff0c;大家好&#xff0c;我是雷工&#xff01; 最近一個項目涉及用KingIOServer采集三菱PLC數據&#xff0c;特記錄通訊過程方便備忘。 一、版本說明&#xff1a; 1、KingIOServer版本&#xff1a;3.7SP2 2、PLC型號&#xff1a;Q03UDV 和Q03UDE自帶以太網網口。…

Vue筆記(五)路由進階

導航守衛 vue-router提供導航守衛主要通過跳轉或**取消*的方式守衛導航。有很多方式植入路由導航中&#xff1a;全局的、單個路由獨享的&#xff0c;或者組件級的。 全局前置守衛&#xff1a;beforeEach。 每個守衛接收兩個參數&#xff1a; to&#xff1a;將要進入的目標fr…

VUE寶典之el-dialog使用

文章目錄 &#x1f341;前言&#x1f341;el-dialog簡介&#x1f341;el-dialog屬性&#x1f341;el-dialog示例&#x1f341;父子組件值傳遞示例 &#x1f341;前言 el-dialog是Element UI庫中的一個重要組件&#xff0c;用于在Vue應用程序中創建彈出框。它提供了一組實用的屬…

【Dubbo3云原生微服務開發實戰】「Dubbo前奏導學」 RPC服務的底層原理和實現

RPC服務 RPC服務介紹RPC通信模式RPC架構組成RPC技術要點RPC通信技術選項分析RPC實戰開發6大基礎組件基礎組件之Guava基礎組件之Hutools基礎組件之ReflectionASM基礎組件之FastJSON/FastJSON2基礎組件之FST相比FastJSON的優勢 基礎組件之Commons-Codec RPC框架層面選項分析RPC組…

持續集成交付CICD:Jenkins配置Nexus制品上傳流水線

目錄 一、實驗 1.Jenkins配置制品上傳流水線 二、問題 1.上傳制品顯示名稱有誤 一、實驗 1.Jenkins配置制品上傳流水線 (1) 新建流水線項目 &#xff08;2&#xff09;描述 &#xff08;3&#xff09;添加參數 &#xff08;4&#xff09;查看構建首頁 &#xff08;5&…

實現簡易的一對一用戶聊天

服務端 package 一對一用戶;import java.awt.BorderLayout; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; import java.util.Vector…

Vue.js - 界面設計工具和UI組件庫

ViewDesign ViewDesign是一款開源的在線設計工具&#xff0c;它主要提供了一種可視化的界面設計方法&#xff0c;可以幫助設計師和開發人員更高效地完成界面設計和開發工作。 ViewDesign的特點是支持在線協作&#xff0c;可以多人同時進行設計&#xff0c;提高了設計效率&…

Redis課程:黑馬點評

文章目錄 基于Redis實現短信登錄商戶查詢緩存優惠券秒殺一人一單 分布式鎖Redis分布式鎖誤刪情況說明解決Redis分布式鎖誤刪問題使用lua腳本解決分布式鎖的原子性問題 基于阻塞隊列實現秒殺優化Redis消息隊列優化秒殺業務達人探店參考 本文是根據黑馬程序員的視頻課程 黑馬程序…

vscode 開發c環境

前置條件&#xff1a; 1.vscode安裝C/C Extension Pack擴展 2.安裝gcc或者clang開發環境 在工程.vscode目錄下創建task任務文件 tasks.json {"tasks": [{"type": "cppbuild","label": "build","command": &q…

Kubernetes架構及核心部件

文章目錄 1、Kubernetes集群概述1.1、概述1.2、通過聲明式API即可 2、Kubernetes 集群架構2.1、Master 組件2.1.1、API Server2.1.2、集群狀態存儲2.1.3、控制器管理器2.1.4、調度器 2.2、Worker Node 組件2.2.1、kubelet2.2.2、容器運行時環境2.2.3、kube-proxy 2.3、圖解架構…

深入解析Node.js:V8引擎、事件驅動和非阻塞式I/O

文章目錄 1. 引言2. 什么是Node.js&#xff1f;3. V8引擎3.1 V8引擎簡介3.2 V8引擎的特點 4. 事件驅動4.1 事件循環4.2 事件觸發與監聽4.2.1 代碼示例 4.3 異步回調4.3.1 代碼示例 5. 非阻塞式I/O5.1 非阻塞式I/O的優勢5.2 異步與同步的對比5.2.1 同步I/O的代碼示例5.2.2 異步I…

前端知識筆記(三)———CSS核心功能手冊:從熟悉到精通

參考HTML代碼 <!DOCTYPE html> <html lang"zh-CN"><head><meta charset"utf-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevice-wi…