P9 LinuxC 進程概述 終端啟動的程序父進程是終端

?前言

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

🎬 個人主頁:@ChenPi

🐻推薦專欄1: 《C++_@ChenPi的博客-CSDN博客》????

🔥 推薦專欄2: 《Linux C應用編程(概念類)_@ChenPi的博客-CSDN博客》???

🛸推薦專欄3: ??????《鏈表_@ChenPi的博客-CSDN博客 》 ???
🌺本篇簡介 ?:? 這一章我們學習一下Linux中非常重要的一部分——進程

Linux 是一個多用戶多任務的操作系統,每個用戶可以同時運行多個程序

進程是程序運行的主體,包括進程的創建,調度和消亡的整個過程

當用戶執行一個指令或者啟動一個程序時,就創建了一個進程

一個運行的程序也可能有多個進程。

每個進程將被分配各種資源? ? ? ? ? ?

01 Linux 下的進程控制塊(PCB)

進程是Linux系統的基本調度單位。在Linux系統中,進程是通過進程控制塊來描述的。

在Linux進程控制塊由task_struct數據結構實現,它記錄了以下幾個類型的信息:

  1. 狀態信息。例如,這個進程處于可執行狀態、休眠、掛起等。
  2. 性質。由于Linux有很多變種,進程有自己獨特的性質。
  3. 資源。資源的鏈接,如內存,還有資源的限制和權限等。
  4. 組織。例如,按照家族關系建立起來的樹(父進程,子進程等)。

每個進程用一個task struct數據結構來表示。

數組task包含指向系統中所有task_struct結構的指針。

系統中的最大進程數目受task數組大小的限制,默認值一般為512。

創建新進程時,Linux將從系統內存中分配一個task_struct結構并將其加入task數組。

如果想看這個結構體可以進入下面鏈接

Linux PCB(進程控制塊) 詳解-CSDN博客

我覺得講的也很清楚

當前運行進程的結構用current 指針來指示。

進程控制塊(Process Control Block,PCB)是用來記錄進程狀態及其他相關信息的數據結構。

PCB是進程存在的唯一標志,PCB存在則進程存在。

系統創建進程時會產生一個 PCB,撤銷進程時,PCB也自動消失。

2.進程的標識

PCB的內容豐富,其中的進程標識包括進程號、用戶標識、用戶組標識、進程時間、資源利用情況等。

這里只介紹其中最主要的進程號,也就是PID。

PID唯一的標識一個進程。除了進程的PID外,進程的父進程號(PPID)也是一個主要的標識。

當父進程終止時,子進程也隨之而終止。

但子進程終止,父進程并不一定終止。

PID 和 PPID都是一個非零正整數。

在Linux中可以通過系統調用getpid 得到進程的 ID,

而getppid可以得到父進程(創建調用該函數進程的進程)的ID。

03獲取進程PID號 —— getpid()

Linux 系統下的每一個進程都有一個進程號(process ID,簡稱 PID),

進程號是一個正數,用于唯一標 識系統中的某一個進程。

在應用程序中,可通過系統調用 getpid()來獲取本進程的進程號,其函數原型如下所示:

#include <sys/types.h>?
#include <unistd.h>?pid_t getpid(void);?

返回值: 成功返回當前進程的ID號,失敗返回-1

應用代碼測試:

#include <stdio.h>?
#include <stdlib.h>?
#include <sys/types.h>?
#include <unistd.h>?int main(void)?{?pid_t pid = getpid();?printf("本進程的 PID 為: %d\n", pid);?exit(0);?}?

ps aux|grep ./a.out

通過PS指令我們可以看到我們運行的./a.out的這個進程是9910

然后我們看我們代碼打印出來的數字,也是9910

所以getpid這個系統調用是返回當前進程的ID號

04 getppid()獲取父進程PID號


除了 getpid()用于獲取本進程的進程號之外,還可以使用 getppid()系統調用獲取父進程的進程號,其函 數原型如下所示:

#include <sys/types.h>?
#include <unistd.h>?pid_t getppid(void);?

返回值:返回父進程的PID號?

#include <stdio.h>?
#include <stdlib.h>?
#include <sys/types.h>?
#include <unistd.h>?int main(void)??
{?pid_t pid = getpid(); //獲取本進程 pid?printf("本進程的 PID 為: %d\n", pid);?pid = getppid(); //獲取父進程 pid?printf("父進程的 PID 為: %d\n", pid);?exit(0);?}?

?

所以到底是不是這樣呢?

我們使用KILL 指令試一下,看把終端殺了會怎么樣

可以看到程序的父進程是終端,因為這個程序是依托于終端運行的?

所以它的父進程是終端,父進程被殺死后,程序也停止運行了

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

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

相關文章

【1】一文讀懂PyQt簡介和環境搭建

目錄 1. PyQt簡介 1.1. Qt 1.2. PyQt 1.3. 關于PyQt和PySide 2. 通過pip安裝PyQt5 3. 無法運行處理 4. VSCode配置PYQT插件 PyQt官網:Riverbank Computing | Introduction 1. PyQt簡介 PyQt是一套Python的GUI開發框架,即圖形用戶界面開發框架。 Python中經常使用的GU…

FreeRTOS的內存管理方法(超詳細)

內存管理 我們知道每次創建任務、隊列、互斥鎖、軟件定時器、信號量或事件組時&#xff0c;RTOS 內核都需要 RAM &#xff0c; RAM 可以從 RTOS API 對象創建函數內的 RTOS 堆自動動態分配&#xff0c; 或者由應用程序編寫者提供。 如果 RTOS 對象是動態創建的&#xff0c;那么…

Leetcode—2646.最小化旅行的價格總和【困難】

2023每日刷題&#xff08;五十三&#xff09; Leetcode—2646.最小化旅行的價格總和 算法思想 看靈神的 實現代碼 class Solution { public:int minimumTotalPrice(int n, vector<vector<int>>& edges, vector<int>& price, vector<vector&l…

發現數學之美--微積分的起源和用途(一文搞懂微積分)

數學&#xff0c;改變世界的基石。微積分十九世紀的三大自然發現之一&#xff0c;迪卡爾建立了解析幾何&#xff0c;把數與圖結合在一起&#xff0c;微積分的發現與創立&#xff0c;是數學新的里程碑&#xff0c;解決了常規方法無法解決的問題&#xff0c;是一次偉大的革命。迪…

服務器數據損壞了有辦法修復嗎 ?

對于企業網站來說&#xff0c;數據庫往往是服務器中最核心的部分&#xff0c;所以一旦數據庫發生損壞&#xff0c;將會給企業帶來巨大的損失&#xff0c;因 此數據庫的數據恢復功能變得越來越重要了。在服務器運行過程中&#xff0c;由于斷電、操作不當或者是客觀原因損壞到服務…

git安裝和配置

git安裝和配置 一、軟件介紹 Git是一個免費開源的分布式版本控制系統&#xff0c;旨在快速高效地處理從小型到大型項目的所有內容。 Git易于學習&#xff0c;占地面積小&#xff0c;性能閃電般快。它以廉價的本地分支、方便的暫存區域和多個工作流等功能勝過了Subversion、C…

linux 常用指令目錄大綱

Linux下的Signal信號處理及詳解&#xff0c;test ok-CSDN博客 Linux下怎樣判斷一個binary是否可以debug//test ok_感知算法工程師的博客-CSDN博客 linux file命令的用法//test ok-CSDN博客 linux下生成core dump方法與gdb解析core dump文件//test ok-CSDN博客 linux readel…

【論文閱讀】Reachability and distance queries via 2-hop labels

Cohen E, Halperin E, Kaplan H, et al. Reachability and distance queries via 2-hop labels[J]. SIAM Journal on Computing, 2003, 32(5): 1338-1355. Abstract 圖中的可達性和距離查詢是許多應用的基礎&#xff0c;從地理導航系統到互聯網路由。其中一些應用程序涉及到巨…

第7節:Vue3 動態綁定多個屬性

可以使用v-bind指令將多個屬性動態綁定到元素上。以下是一個簡單的實例&#xff1a; <template><view class"container"><text v-bind"dynamicProps">{{ message }}</text><button click"toggleActive">切換激活…

金南瓜SECS/GEM C# SDK 快速使用指南

本文對如何使用金南瓜SECS/GEM C# SDK 快速創建一個滿足SECS/GEM通信要求的應用程序&#xff0c;只需簡單3步完成。 第一步&#xff1a;創建C# .NET程序 示例使用Visual Studio 2010&#xff0c;使用者可以選擇更高級版本 Visual Studio 第二步&#xff1a;添加DLL庫引用&am…

圖論-并查集

并查集(Union-find Sets)是一種非常精巧而實用的數據結構,它主要用于處理一些不相交集合的合并問題.一些常見的用途有求連通子圖,求最小生成樹Kruskal算法和最近公共祖先(LCA)等. 并查集的基本操作主要有: .1.初始化 2.查詢find 3.合并union 一般我們都會采用路徑壓縮 這樣…

git標簽的管理與思考

git 標簽管理 git 如何打標簽呢&#xff1f; 標簽是什么? 標簽 相當于一個 版本管理的一個貼紙&#xff0c;隨時 可以通過標簽 切換到 這個版本的狀態 &#xff0c; 有人可能有疑問 git commit 就可以知道 代碼的改動了&#xff0c; 為啥還需要標簽來管理呢&#xff1f; …

從二分類到多分類:探索Logistic回歸到Softmax回歸的演進

隨著機器學習和深度學習的迅猛發展&#xff0c;我們需要越來越靈活和強大的模型來解決各種不同的問題。在分類問題中&#xff0c;Logistic回歸一直是一個常見而有效的工具&#xff0c;尤其是在二分類場景中。然而&#xff0c;隨著問題變得更加復雜&#xff0c;我們需要更先進的…

node筆記

文章目錄 一、Node.js基礎1. 認識Node.js01 nodejs的特性02 使用 Node.js 需要了解多少 JavaScript03 瀏覽器環境vs node環境 2. 開發環境搭建3. 模塊、包、commonJS02 CommonJS規范03 modules模塊化規范寫法 4. Npm&Yarn01 npm的使用02 全局安裝 nrm03 yarn使用 5. 內置模…

在idea中使用maven創建dynamic web project

1、先創建一個empty project 2、添加一個module , 核心是選擇maven archetype webapp, 這個是maven提供的創建web工程的模版。 3、添加完等自動安裝好即可 4、目錄可能不完整 右鍵src---->點擊New---->點擊Directory &#xff08;注意&#xff1a;這是筆者所缺失的結…

每日一道c語言

任務描述 題目描述:輸入10個互不相同的整數并保存在數組中&#xff0c;找到該最大元素并刪除它&#xff0c;輸出刪除后的數組 相關知識&#xff08;略&#xff09; 編程要求 請仔細閱讀右側代碼&#xff0c;結合相關知識&#xff0c;在Begin-End區域內進行代碼補充&#xf…

ooTD I 女兒是自己的,盡情打扮盡情可愛

分享女寶的時尚穿搭 奶乎乎的黃色也太好看了 超足充絨量&#xff0b;優質面料 柔軟蓬松上身體驗感超贊 怎么穿都好看系列 輕輕松松打造時尚造型&#xff01;&#xff01;

Linux 刪除文件名亂碼的文件

現象&#xff1a; 處理&#xff1a; 1.>ls -li 獲取文件對應的ID號 2.把刪除指定文件&#xff08;ID號 &#xff09;執行&#xff1a; find ./ -inum 268648910 -exec rm {} \;

詳解Keras3.0 Models API: Whole model saving loading

1、save方法 Model.save(filepath, overwriteTrue, **kwargs) 將模型另存為.keras文件 參數說明 filepath: 保存模型的路徑。必須以.keras結尾overwrite&#xff1a;布爾值&#xff0c;表示是否覆蓋已存在的文件。默認為 True&#xff0c;即覆蓋已存在的文件。save_format…

微信小程序_介紹

開發準備 注冊微信小程序 進入微信公眾平臺 點擊立即注冊&#xff0c;選擇小程序&#xff0c;前往注冊 完善個人/企業信息 獲取AppID 進入小程序頁面->開發->開發設置->AppID 下載微信開發者工具 微信官方下載下載微信開發者工具穩定版 創建項目 綁定AppID不使用…