Linux進程管理:從基礎到實戰

在 Linux 系統編程中,進程(Process) 是操作系統進行資源分配和調度的基本單位。理解進程的概念是掌握系統編程、多任務處理、并發編程的基礎。


目錄

一、什么是進程?

定義:

二、進程的生命周期

示例:查看當前系統中的進程

三、進程的狀態(STAT)

四、進程的父子關系與進程樹

示例:查看進程樹

關鍵概念:

五、進程標識符(PID 和 PPID)

示例:查看當前 shell 的 PID 和 PPID

六、前臺進程與后臺進程

示例:將進程放入后臺運行

七、進程的優先級(Nice 值)

查看 nice 值:

設置 nice 值啟動進程:

修改已有進程的 nice 值:

八、進程相關的系統調用(C語言接口)

九、第一個 C 程序:演示 fork() 創建進程

示例代碼:process_example.c

編譯并運行:

十、總結知識點圖解(知識樹狀圖)

十一、課后練習建議


一、什么是進程?

定義:

進程是一個程序的執行實例,包括:

  • 程序代碼(Text Segment)
  • 當前活動(如寄存器的狀態、程序計數器等)
  • 數據段(Data Segment)
  • 堆棧(Stack)
  • 打開的文件、信號處理函數等資源

簡單來說:一個正在運行的程序就是一個進程。


二、進程的生命周期

一個進程從創建到終止,會經歷以下幾個階段:

+-------------------+
|     創建進程      |   fork()
+-------------------+|v
+-------------------+
|    運行/就緒狀態  |
+-------------------+|v
+-------------------+
| 阻塞(等待I/O等) |
+-------------------+|v
+-------------------+
|     終止或退出    | exit(), _exit()
+-------------------+

示例:查看當前系統中的進程

ps aux

輸出示例(簡化):

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.2 168944  9348 ?        Ss   09:00   0:01 /sbin/init
user1     1234  0.1  0.5 500000 20000 ?        Sl   09:10   0:02 /usr/bin/vim

各列含義簡要說明:

列名含義
USER進程所有者
PID進程 ID
%CPU占用 CPU 百分比
%MEM占用內存百分比
VSZ虛擬內存使用量(KB)
RSS實際物理內存使用量(KB)
TTY控制終端
STAT進程狀態
START進程啟動時間
TIME占用 CPU 時間總和
COMMAND啟動命令

三、進程的狀態(STAT)

Linux 中進程常見的狀態有以下幾種:

狀態字符含義
R (Running)正在運行或準備運行
S (Sleeping)可中斷的睡眠狀態(等待某事件)
D (Disk Sleep)不可中斷的睡眠(通常在 I/O)
Z (Zombie)僵尸進程(已結束但未被回收)
T (Stopped)被停止(如收到 SIGSTOP)
X (Dead)已死亡(不會出現在 ps 中)

四、進程的父子關系與進程樹

每個進程都有一個父進程(除了 init/systemd),通過 fork() 創建子進程。

示例:查看進程樹

pstree

輸出示例:

systemd─┬─NetworkManager───2*[{NetworkManager}]├─login───bash└─sshd───bash───vim

關鍵概念:

  • 父進程(Parent Process):創建其他進程的進程。
  • 子進程(Child Process):由父進程創建的進程。
  • 僵尸進程(Zombie Process):子進程結束后,父進程沒有調用?wait()?或?waitpid()?獲取其退出狀態,該子進程變成僵尸進程。
  • 孤兒進程(Orphan Process):父進程先于子進程結束,子進程成為孤兒進程,由?init(PID=1)接管。

五、進程標識符(PID 和 PPID)

  • PID(Process ID):進程的唯一標識號。
  • PPID(Parent Process ID):父進程的 PID。

示例:查看當前 shell 的 PID 和 PPID

echo "Current PID: $$"
echo "Parent PID: $PPID"

輸出示例:

Current PID: 12345
Parent PID: 11111

你也可以使用 ps 查看詳細信息:

ps -p 12345 -o pid,ppid,comm

六、前臺進程與后臺進程

  • 前臺進程:占用終端,用戶可以直接交互。
  • 后臺進程:不占用終端,通常用于長時間運行的任務。

示例:將進程放入后臺運行

sleep 100 &   # 在后臺運行

查看后臺進程:

jobs

七、進程的優先級(Nice 值)

Linux 使用 nice 值 來控制進程的優先級,默認值為 0,范圍為 -20(最高優先級)到 19(最低優先級)。

查看 nice 值:

ps -l

設置 nice 值啟動進程:

nice -n 10 sleep 100 &

修改已有進程的 nice 值:

renice 5 -p 12345

八、進程相關的系統調用(C語言接口)

這些是 Linux 編程中最常用的系統調用:

系統調用功能描述
fork()創建子進程
exec()?系列替換當前進程為新程序
wait()等待子進程結束
exit()終止當前進程
getpid()獲取當前進程的 PID
getppid()獲取父進程的 PID

九、第一個 C 程序:演示 fork() 創建進程

示例代碼:process_example.c

#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>int main() {pid_t pid;printf("Before fork: This is the parent process (PID: %d)\n", getpid());pid = fork();  // 創建子進程if (pid < 0) {fprintf(stderr, "Fork failed\n");return 1;} else if (pid == 0) {// 子進程printf("This is the child process (PID: %d), Parent PID: %d\n", getpid(), getppid());} else {// 父進程printf("This is the parent process again (PID: %d), Child PID: %d\n", getpid(), pid);}return 0;
}

編譯并運行:

gcc process_example.c -o process_example
./process_example

輸出示例(順序可能不同):

Before fork: This is the parent process (PID: 12345)
This is the parent process again (PID: 12345), Child PID: 12346
This is the child process (PID: 12346), Parent PID: 1

注意:由于父進程和子進程是并發執行的,所以輸出順序可能不確定。


十、總結知識點圖解(知識樹狀圖)

進程的概念
│
├── 什么是進程?
│   ├── 程序的執行實例
│   └── 包含代碼、數據、堆棧、資源等
│
├── 進程生命周期
│   ├── 創建 → 運行 → 阻塞 → 終止
│   └── fork(), exec(), exit()
│
├── 進程狀態(STAT)
│   ├── R/S/D/Z/T/X
│
├── 進程關系與進程樹
│   ├── 父進程與子進程
│   ├── 僵尸進程 vs 孤兒進程
│   └── pstree 命令查看樹結構
│
├── 進程標識符
│   ├── PID(當前進程ID)
│   └── PPID(父進程ID)
│
├── 前臺進程 vs 后臺進程
│   ├── jobs, &, fg, bg
│
├── 進程優先級(nice)
│   ├── nice, renice 命令
│
└── 進程相關系統調用(C語言)├── fork()├── exec()├── wait()├── exit()├── getpid()└── getppid()

十一、課后練習建議

  1. 使用?ps?命令查找當前運行的所有?bash?進程。
  2. 寫一個 Shell 腳本,在后臺運行多個?sleep?命令,并使用?jobs?查看它們的狀態。
  3. 編寫一個 C 程序,使用?fork()?創建兩個子進程,分別打印不同的信息。
  4. 嘗試使用?nice?和?renice?修改某個進程的優先級。

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

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

相關文章

工業物聯網中的 Modbus:傳感器與網關通信實戰(二)

四、實戰案例解析 4.1 項目背景與目標 某智能工廠致力于提升生產過程的自動化和智能化水平&#xff0c;對生產線上的各種設備進行實時監控和數據分析。在該工廠的一個生產車間中&#xff0c;存在著大量的傳感器&#xff0c;用于監測設備的運行狀態、環境參數等信息。這些傳感…

飛算 JavaAI 智控引擎:全鏈路開發自動化新圖景

免責聲明: 此文章的所有內容皆是本人實驗測評&#xff0c;并非廣告推廣&#xff0c;并非抄襲。如有侵權&#xff0c;請聯系&#xff0c;謝謝! 文章目錄&#x1f4dd;前言一、飛算 Java AI 智能開發助手簡介1.1何為飛算 Java AI智能助手&#xff1f;2.2 飛算Java AI 直擊開發全場…

MYSQL數據庫(九)MVCC-多版本并發控制

目錄 一 前景導入 1 當前讀 2 快照讀 二 MVCC 1 隱藏字段 2 UndoLog 回滾日志 (1 UndoLog日志 (2 UndoLog版本鏈 3 Read View 面試八股 介紹一下MVCC 一 前景導入 1 當前讀 可使當前事務讀取的是最新版本的數據&#xff0c;讀取時還要保證其他并發事務不能修改當中…

[Pytest] [Part 2]增加 log功能

開始實現需求之前先做個log類&#xff0c;可以給其他模塊使用&#xff0c;也方便以后修改log類的功能和屬性。 使用的是python中的logging包來進行簡單的封裝&#xff0c;具體代碼如下 import logging import sysclass TefLogger:def __init__(self, logger_nameTEST_FRAMEWOR…

NeighborGeo:基于鄰居的IP地理定位(三)

NeighborGeo:基于neighbors的IP地理定位 X. Wang, D. Zhao, X. Liu, Z. Zhang, T. Zhao, NeighborGeo: IP geolocation based on neighbors, Comput. Netw. 257 (2025) 110896, 3. NeighborGeo 本文提出NeighborGeo,利用圖結構學習和有監督對比學習來建立可靠的地標-目標關…

python使用fastmcp包編寫mcp服務端(mcp_server)和mcp客戶端(mcp_client)

安裝fastmcp pip install fastmcp編寫mcp服務端代碼 from fastmcp import FastMCP mcp FastMCP(weather)mcp.tool() def get_weather(city: str):獲取對應城市的天氣:param city: 目標城市:return: 該城市的天氣return f"{city}天氣晴朗&#xff0c;溫度60度&#xff01…

(1)機器學習小白入門 YOLOv:從概念到實踐

(1)機器學習小白入門YOLOv &#xff1a;從概念到實踐 (2)機器學習小白入門 YOLOv&#xff1a;從模塊優化到工程部署 (3)機器學習小白入門 YOLOv&#xff1a; 解鎖圖片分類新技能 目標檢測一直是一個機器學習的一個重要的應用方向。而 YOLOv&#xff08;You Only Look Once&…

Appium 簡介

Appium 是一個開源的移動應用自動化測試框架&#xff0c;用于測試原生應用(native)、混合應用(hybrid)和移動網頁應用(mobile web)。它支持 iOS、Android 和 Windows 平臺。 https://www.bilibili.com/video/BV1R93szkEhi/? App自動化測試&#xff1a;App測試AppiumUiAutomato…

【C語言刷題】第十一天:加量加餐繼續,代碼題訓練,融會貫通IO模式

&#x1f525;個人主頁&#xff1a;艾莉絲努力練劍 ?專欄傳送門&#xff1a;《C語言》、《數據結構與算法》、C語言刷題12天IO強訓、LeetCode代碼強化刷題 &#x1f349;學習方向&#xff1a;C/C方向 ??人生格言&#xff1a;為天地立心&#xff0c;為生民立命&#xff0c;為…

免費版安全性縮水?ToDesk、TeamViewer、向日葵、網易UU遠程訪問隱私防護測評

一、前言 在這個居家辦公、遠程技術支持成為常態的時代&#xff0c;我們經常需要把電腦控制權交給遠方的同事或技術人員。但你想過沒有&#xff0c;那些免費遠程控制軟件&#xff0c;真的能保護好你的隱私嗎&#xff1f; 好用的遠程軟件通常會收費運營&#xff0c;投入經費去開…

nginx部署發布Vite項目

1 引言 在之前的文章《Ubuntu云服務器上部署發布Vite項目》中筆者使用了Vite提供的預覽服務(npm run preview)來在云服務器上發布Web應用。這樣做輕量應用是沒問題的&#xff0c;不過遇到一些專業的問題就不行了&#xff0c;最好還是使用專業的HTTP服務器。除此之外&#xff0…

Unity文件夾標簽 —— FolderTag

GitHub地址 FolderTag 下載之后解壓&#xff0c;將FolderTag文件夾拖進Unity項目的Assets文件夾 選中文件夾&#xff0c;填上標簽

【0基礎開發油猴腳本】某漫畫網站圖片旋轉

有朋友在用某漫畫網站在線看漫畫&#xff0c;但是那個網站會把漫畫圖片右旋90度&#xff0c;如圖。于是&#xff0c;他就像我發起了求助&#xff0c;問我能不能寫個腳本。我說&#xff0c;AI都發展到2025了&#xff0c;前端&#xff08;腳本&#xff09;這種東西還用自己寫嗎&a…

Vue Router 中,params參數的名稱必須與路由配置中的動態路徑參數名完全一致

路由配置與 params 參數的綁定關系 在路由配置中&#xff0c;使用 冒號&#xff08;:&#xff09; 定義動態路徑參數&#xff1a; // router.js&#xff08;路由配置&#xff09; { path: /search/:keyword, // 這里的:keyword是動態路徑參數 name: Search, component: S…

Spring Boot 應用開發實戰指南:從入門到實戰(內含實用技巧+項目案例)

&#x1f4d8; Spring Boot 應用開發實戰指南&#xff1a;從入門到實戰&#xff08;內含實用技巧項目案例&#xff09;&#x1f680; 你是否還在為 Spring 配置復雜、開發效率低下而苦惱&#xff1f;Spring Boot 早已成為 Java 后端開發的“標配”&#xff0c;本篇文章將帶你全…

【NLP入門系列五】中文文本分類案例

&#x1f368; 本文為&#x1f517;365天深度學習訓練營 中的學習記錄博客&#x1f356; 原作者&#xff1a;K同學啊 博主簡介&#xff1a;努力學習的22級本科生一枚 &#x1f31f;?&#xff1b;探索AI算法&#xff0c;C&#xff0c;go語言的世界&#xff1b;在迷茫中尋找光芒…

【微信小程序】- 監聽全局globalData數據

【微信小程序】- 監聽全局globalData數據 數據劫持&#xff08;Object.defineProperty&#xff09;實現適用場景 數據劫持&#xff08;Object.defineProperty&#xff09; 實現 通過攔截 globalData 的屬性讀寫實現自動監聽&#xff0c;適合精確監聽特定變量。 ?實現步驟?&…

高速公路閑置土地資源化利用:廣西浦北互通3MW分布式光伏監控實踐

摘要&#xff1a; 分布式光伏項目在清潔能源轉型中扮演重要角色&#xff0c;其創新的空間利用模式有助于緩解能源開發與土地資源間的矛盾。廣西大唐至浦北高速公路&#xff08;浦北互通&#xff09;項目&#xff0c;利用高速公路沿線閑置空地建設光伏電站&#xff0c;發揮了分布…

【Linux網絡編程】網絡基礎

目錄 計算機網絡背景 初識協議 網絡協議 協議分層 OSI七層模型 TCP/IP五層(或四層)模型 再識協議 為什么要有TCP/IP協議&#xff1f; 什么是TCP/IP協議&#xff1f; 重談協議 網絡傳輸基本流程 局域網傳輸流程 跨網絡傳輸流程 Socket編程預備 理解源IP地址與目的…

BlenderBot對話機器人大模型Facebook開發

文章目錄 &#x1f680; BlenderBot 的關鍵特性&#x1f9ea; 版本與改進&#x1f4ca; 應用實例 Blender是攪拌機&#xff0c;果汁機&#xff0c;混合機的意思。 BlenderBot 是由 Facebook AI Research (FAIR) 開發的一種先進的對話生成模型。它旨在通過融合多種對話技能&…