(1)PCB
每個進程在內核中都有一個進程控制塊(PCB)來維護進程相關的信息,Linux內核的進程控制塊是task_struct結構體。grep -r “task_struct” /? 可以查找根目錄下,包含task_struct的文件文件。或者 find /usr -name sched.h。從而,在/usr/include/linux/sched.h文件中可以查看struct task_struct 結構體定義。其內部成員有很多,我們重點掌握以下部分即可:
(1)進程id。系統中每個進程有唯一的id,在C語言中用pid_t類型表示,其實就是一個非負整數。
(2)進程的狀態,有就緒、運行、掛起、停止等狀態。
(3)進程切換時需要保存和恢復的一些CPU寄存器的值。
(4)描述虛擬地址空間的信息(如虛擬地址與物理地址之間的映射關系)。
(5)描述控制終端的信息(桌面終端、文字終端和設備終端,pts/0或者tty0等)。
(6)當前工作目錄(當前進程的工作目錄)。
(7)umask掩碼(對文件的一種保護機制,文件權限)。
(8)文件描述符表,包含很多指向file結構體的指針。
(9)和信號相關的信息。
(10)用戶id和組id。
(11)會話(Session)和進程組(功能相似的一些進程組成一個進程組)。
(12)進程可以使用的資源上限(Resource Limit)。(ulimit –a命令可以查看)
(2)ulimit命令詳解
ulimit -a命令用來顯示各種進程能夠使用的資源上限(顯示并控制shell啟動的程序或進程所能夠使用的資源上限,ulimit為shell內建命令),Linux對于每個用戶,系統限制其最大進程數,為提高性能,可以根據設備資源情況,設置個Linux用戶的最大進程數,一些參數需要設置為無限制,如:數據段長度:ulimit -d unlimited???? 最大內存大小:ulimit -m unlimited????? 堆棧大小:ulimit -s unlimited
在用這個命令的時候主要是為了產生core文件,就是程序運行發行段錯誤時的文件:ulimit -c unlimited??? 從而產生core文件。
[root@localhost ~]# ulimit -a
core file size????????? (blocks, -c) 0
data seg size?????????? (kbytes, -d) unlimited
scheduling priority???????????? (-e) 0
file size?????????????? (blocks, -f) unlimited
pending signals???????????????? (-i) 14473
max locked memory?????? (kbytes, -l) 64
max memory size???????? (kbytes, -m) unlimited
open files????????????????????? (-n) 1024
pipe size??????????? (512 bytes, -p) 8
POSIX message queues???? (bytes, -q) 819200
real-time priority????????????? (-r) 0
stack size????????????? (kbytes, -s) 8192
cpu time?????????????? (seconds, -t) unlimited
max user processes????????????? (-u) 14473
virtual memory????????? (kbytes, -v) unlimited
file locks????????????????????? (-x) unlimited
如果需要修改open files (-n) 1024的值,命令就是limit -n 2048(隨各自需要設置),其余類似。
參數解釋:
?? -a 顯示目前資源限制的設定。?
???? ? -c <core文件上限> 設定core文件的最大值,單位為區塊。?
?? ????-d <數據節區大小> 程序數據節區的最大值,單位為KB。?
??? ?? -f <文件大小> shell所能建立的最大文件,單位為區塊。?
???? ? -H 設定資源的硬性限制,也就是管理員所設下的限制。?
???? ? -m <內存大小> 指定可使用內存的上限,單位為KB。?
?????? -n <文件數目> 指定同一時間最多可開啟的文件數。?
????? ?-p <緩沖區大小> 指定管道緩沖區的大小,單位512字節。?
????? ?-s <堆疊大小> 指定堆疊的上限,單位為KB。?
????? ?-S 設定資源的彈性限制。?
????? ?-t <CPU時間> 指定CPU使用時間的上限,單位為秒。?
????? ?-u <程序數目> 用戶最多可開啟的程序數目。?
????? ?-v <虛擬內存大小> 指定可使用的虛擬內存上限,單位為KB。
(3)進程狀態
進程基本的狀態有5種。分別為初始態(創建),就緒態,運行態,掛起態與終止態。其中初始態為進程準備階段,常與就緒態結合來看。
?