進程控制塊PCB(進程描述符)

1PCB

每個進程在內核中都有一個進程控制塊(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命令可以查看)

2ulimit命令詳解

ulimit -a命令用來顯示各種進程能夠使用的資源上限(顯示并控制shell啟動的程序或進程所能夠使用的資源上限,ulimitshell內建命令),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種。分別為初始態(創建),就緒態,運行態,掛起態與終止態。其中初始態為進程準備階段,常與就緒態結合來看。

?

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

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

相關文章

103. 二叉樹的鋸齒形層次遍歷

給定一個二叉樹&#xff0c;返回其節點值的鋸齒形層次遍歷。&#xff08;即先從左往右&#xff0c;再從右往左進行下一層遍歷&#xff0c;以此類推&#xff0c;層與層之間交替進行&#xff09;。 例如&#xff1a; 給定二叉樹 [3,9,20,null,null,15,7], 3 / \ 9 20 /…

fork、getpid、getppid函數

#include <unistd.h> pid_t fork(void); 作用&#xff1a;創建一個子進程。 到目前為止&#xff0c;我們可以直到兩種創建進程的方法&#xff1a;1. 通過執行二進制文件來創建一個進程&#xff0c;如&#xff1a;./a.out /bin/ls&#xff1b;2.通過fork函數來創建一個…

107. 二叉樹的層次遍歷 II

給定一個二叉樹&#xff0c;返回其節點值自底向上的層次遍歷。 &#xff08;即按從葉子節點所在層到根節點所在的層&#xff0c;逐層從左向右遍歷&#xff09; 例如&#xff1a; 給定二叉樹 [3,9,20,null,null,15,7], 3/ \9 20/ \15 7返回其自底向上的層次遍歷為&#xff…

循環創建N個子進程

以循環創建5個進程為例&#xff0c;給出如下代碼&#xff0c;分析其錯誤&#xff1a; #include <stdio.h> #include <stdlib.h> #include <unistd.h>int main(void) {int i;pid_t pid;printf("xxxxxxxxxxx\n");for (i 0; i < 5; i){pid fork…

【C++ Primer | 19】控制內存分配

1. 測試代碼&#xff1a; #include <iostream> #include <new> #include <cstring> #include <cstdlib> using namespace std;void* operator new(size_t size) {cout << "global Override operator new" << endl;if (void* p…

getuid、geteuid、getgid和getegid函數

#include <unistd.h> #include <sys/types.h> uid_t getuid(void); uid_t geteuid(void); 作用&#xff1a;getuid返回當前進程的實際用戶ID&#xff1b;geteuid返回當前用戶的有效用戶ID。這兩個總是成功&#xff0c;不會失敗。 #include <unistd.h> #…

【第15章】虛函數

一、為什么基類中的析構函數要聲明為虛析構函數&#xff1f; 直接的講&#xff0c;C中基類采用virtual虛析構函數是為了防止內存泄漏。具體地說&#xff0c;如果派生類中申請了內存空間&#xff0c;并在其析構函數中對這些內存空間進行釋放。假設基類中采用的是非虛析構函數&am…

進程共享(讀時共享寫時復制)

父子進程之間在剛fork后。父子相同處: 全局變量、.data、.bbs、.text、棧、堆、環境變量、用戶ID、宿主目錄&#xff08;進程用戶家目錄&#xff09;、進程工作目錄、信號處理方式等等&#xff0c;即0~3G的用戶空間是完全一樣的。父子不同處: 1.進程ID 2.fork返回值 3.父進…

【C++ Primer | 08】IO庫

一、istringstream類 描述&#xff1a;從流中提取數據&#xff0c;支持 >> 操作 這里字符串可以包括多個單詞&#xff0c;單詞之間使用空格分開 #include <iostream> #include <sstream> using namespace std; int main() {istringstream istr(&quo…

gdb調試(如何跟蹤指定進程)

使用gdb調試的時候&#xff0c;gdb只能跟蹤一個進程。可以在fork函數調用之前&#xff0c;通過指令設置gdb調試工具跟蹤父進程或者是跟蹤子進程。默認跟蹤父進程。 set follow-fork-mode child 命令設置gdb在fork之后跟蹤子進程。 set follow-fork-mode parent 設置跟蹤父進程…

【Leetcode | 01】Backtracking

回溯算法序號題號117. 電話號碼的字母組合222. 括號生成 39. 組合總和 40. 組合總和 II 46. 全排列 47. 全排列 II 60. 第k個排列 77. 組合 78. 子集 90. 子集 II 93. 復原IP地址 131. 分割回文串 216. 組合總和 III 306. 累加數 357. 計算各個位數不同的數字個數 401. 二進…

1033. 舊鍵盤打字(20)

舊鍵盤上壞了幾個鍵&#xff0c;于是在敲一段文字的時候&#xff0c;對應的字符就不會出現。現在給出應該輸入的一段文字、以及壞掉的那些鍵&#xff0c;打出的結果文字會是怎樣&#xff1f; 輸入格式&#xff1a; 輸入在2行中分別給出壞掉的那些鍵、以及應該輸入的文字。其中對…

1038. 統計同成績學生(20)

本題要求讀入N名學生的成績&#xff0c;將獲得某一給定分數的學生人數輸出。 輸入格式&#xff1a; 輸入在第1行給出不超過105的正整數N&#xff0c;即學生總人數。隨后1行給出N名學生的百分制整數成績&#xff0c;中間以空格分隔。最后1行給出要查詢的分數個數K&#xff08;不…

EXEC函數族的一般規律

事實上&#xff0c;只有execve是真正的系統調用&#xff0c;其它五個函數最終都調用execve&#xff0c;所以execve在man手冊第2節&#xff0c;其它函數在man手冊第3節。這些函數之間的關系如下圖所示。

exit與_exit函fork與vfork函數

#include <stdlib.h> void exit(int status); #include <unistd.h> void _exit(int status); exit函數與_exit函數一樣&#xff0c;都是系統函數&#xff0c;且都是用來終止一個進程的&#xff0c;無論在程序中的什么位置&#xff0c;只要執行這exit或_exit系統…

1042. 字符統計(20)

請編寫程序&#xff0c;找出一段給定文字中出現最頻繁的那個英文字母。 輸入格式&#xff1a; 輸入在一行中給出一個長度不超過1000的字符串。字符串由ASCII碼表中任意可見字符及空格組成&#xff0c;至少包含1個英文字母&#xff0c;以回車結束&#xff08;回車不算在內&#…

孤兒進程與僵尸進程

孤兒進程&#xff1a;父進程先于子進程結束&#xff08;遇到return、exit、異常終止等情況時&#xff09;&#xff0c;則子進程成為孤兒進程&#xff0c;子進程的父進程成為init進程&#xff0c;稱為init進程領養孤兒進程。可以通過getppid函數來查看孤兒進程的父進程ID&#x…

1043. 輸出PATest(20)

給定一個長度不超過10000的、僅由英文字母構成的字符串。請將字符重新調整順序&#xff0c;按“PATestPATest....”這樣的順序輸出&#xff0c;并忽略其它字符。當然&#xff0c;六種字符的個數不一定是一樣多的&#xff0c;若某種字符已經輸出完&#xff0c;則余下的字符仍按P…

wait函數

#include <sys/types.h> #include <sys/wait.h> pid_t wait(int *status); 僵尸進程。進程結束后放棄了幾乎所有的內存空間&#xff0c;沒有任何可以執行的代碼&#xff0c;也不能被調度&#xff0c;僅僅在進程列表中保留著一個位置&#xff0c;記載著該進程的退出…

map與unordered_map

時間復雜度&#xff1a; mapunordered_mapOrderingincreasing orderno orderImplementationSelf balancing BSTHash Tablesearch timelog(n) O(1&#xff09;: 平均水ping O(n&#xff09;&#xff1a;最糟糕情況 Insertion timelog(n) RebalanceSame sa searchDelete timelo…