Linux進程
進程介紹
1. 進程的基本概念
-
定義:進程是程序的一次執行過程,擁有獨立的地址空間、資源(如內存、文件描述符)和唯一的進程 ID(PID)。
-
組成:
-
代碼段:程序的指令。
-
數據段:全局變量和靜態變量。
-
堆棧段:局部變量和函數調用信息。
-
進程控制塊(PCB):內核數據結構(如?
task_struct
),存儲進程狀態、PID、優先級等信息。
-
2. 進程的生命周期
Linux 進程通常有以下狀態(可通過?ps
?命令查看):
-
R (Running):正在運行或可運行(就緒)。
-
S (Sleeping):可中斷的睡眠(等待事件,如 I/O)。
-
D (Uninterruptible Sleep):不可中斷的睡眠(通常等待硬件操作)。
-
T (Stopped):被信號(如?
SIGSTOP
)暫停。 -
Z (Zombie):已終止但父進程未回收資源。
-
X (Dead):完全終止(不可見)。
3. 進程相關命令
查看進程
-
ps
:查看當前進程快照。bash
復制
下載
ps aux # 查看所有進程詳細信息 ps -ef # 查看完整格式的進程列表
-
top
/htop
:動態查看進程資源占用(CPU、內存等)。 -
pstree
:以樹形結構顯示進程關系。
管理進程
-
kill
:發送信號終止或控制進程。bash
復制
下載
kill -9 PID # 強制終止進程(SIGKILL) kill -15 PID # 優雅終止(SIGTERM)
-
nice
/renice
:調整進程優先級(Nice 值范圍:-20 到 19,值越低優先級越高)。 -
bg
/fg
:控制進程后臺/前臺運行。
查找進程
-
pgrep
:根據名稱查找 PID。bash
復制
下載
pgrep nginx
-
pidof
:獲取正在運行的程序的 PID。bash
復制
下載
pidof sshd
4. 進程間通信(IPC)
Linux 進程可以通過以下方式通信:
-
信號(Signals):如?
SIGINT
(Ctrl+C)、SIGKILL
。 -
管道(Pipe):匿名管道(
|
)或命名管道(mkfifo
)。 -
共享內存:高效的數據共享。
-
消息隊列:存儲在內核中的消息鏈表。
-
套接字(Socket):跨網絡通信。
5. 前臺與后臺進程
-
前臺進程:占用終端,接收輸入(如直接運行?
vim
)。 -
后臺進程:不占用終端,以?
&
?啟動:bash
復制
下載
sleep 60 &
-
切換狀態:
-
Ctrl + Z
:暫停進程并轉入后臺。 -
jobs
:查看后臺作業。 -
fg %n
:將后臺作業?n
?切換到前臺。
-
6. 守護進程(Daemon)
-
長期運行的后臺服務進程(如?
sshd
、nginx
)。 -
特點:
-
脫離終端(由?
init
?或?systemd
?管理)。 -
通常以 root 權限運行。
-
-
創建方式:通過?
fork()
?兩次并脫離控制終端。
7. 僵尸進程與孤兒進程
-
僵尸進程:子進程終止后,父進程未調用?
wait()
?回收其資源。解決:bash
復制
下載
kill -HUP PPID # 重啟父進程
-
孤兒進程:父進程先終止,子進程由?
init
(PID 1)接管。
8. 系統調用與進程管理
Linux 提供以下關鍵系統調用:
-
fork()
:創建子進程。 -
exec()
:替換當前進程映像。 -
wait()
:父進程等待子進程終止。