進程(Process)全面概述
本文檔擴展了進程的定義、屬性、生命周期、管理機制及示例,涵蓋 task_struct
結構、進程鏈表、狀態與優先級、fork
函數及其寫時復制示例。
一、進程基本概念
- 進程:系統進行資源分配和調度的基本單位,是程序在“某數據集合”上的一次運行活動。
- 程序 vs. 進程:
- 程序:靜態指令集合。
- 進程:程序的動態執行實例,包含代碼、數據和狀態。
// 簡單示例:使用 exec 執行外部程序
#include <unistd.h>
int main() {char *args[] = {"/bin/ls", "-l", NULL};execv(args[0], args);return 0;
}
二、task_struct 結構說明
Linux 內核中以 task_struct
結構表示進程。
struct task_struct {pid_t pid; // 進程標識符enum task_state state; // 運行狀態int prio, static_prio; // 動態優先級 & 靜態優先級struct mm_struct *mm; // 內存管理信息struct task_struct *parent; // 父進程指針struct list_head children; // 子進程鏈表頭struct list_head sibling; // 在父進程的子鏈表中的節點// ... 其他字段:寄存器、文件描述符、會計信息等
};
示例:打印當前進程的 PID 和狀態。
printf("PID=%d, State=%d, Priority=%d\n", current->pid, current->state, current->prio);