diff --git a/study/process/pid/PID命名空间.png b/study/process/pid/PID命名空间.png
deleted file mode 100644
index 228b3b6..0000000
Binary files a/study/process/pid/PID命名空间.png and /dev/null differ
diff --git a/study/process/pid/pid.md b/study/process/pid/pid.md
deleted file mode 100644
index 7d814c4..0000000
--- a/study/process/pid/pid.md
+++ /dev/null
@@ -1,645 +0,0 @@
-Linux 鍐呮牳浣跨敤 task_struct 鏁版嵁缁撴瀯鏉ュ叧鑱旀墍鏈変笌杩涚▼鏈夊叧鐨勬暟鎹拰缁撴瀯锛孡inux 鍐呮牳鎵鏈夋秹鍙婂埌杩涚▼鍜岀▼搴忕殑鎵鏈夌畻娉曢兘鏄洿缁曡鏁版嵁缁撴瀯寤虹珛鐨勶紝鏄唴鏍镐腑鏈閲嶈鐨勬暟鎹粨鏋勪箣涓銆
-
-璇ユ暟鎹粨鏋勫湪鍐呮牳鏂囦欢[include/linux/sched.h](http://lxr.free-electrons.com/source/include/linux/sched.h#L1389)涓畾涔夛紝鍦ㄧ洰鍓嶆渶鏂扮殑Linux-4.5锛堟埅鑷崇洰鍓嶇殑鏃ユ湡涓2016-05-11锛夌殑鍐呮牳涓紝璇ユ暟鎹粨鏋勮冻瓒虫湁 380 琛屼箣澶氾紝鍦ㄨ繖閲屾垜涓嶅彲鑳介愰」鍘绘弿杩板叾琛ㄧず鐨勫惈涔夛紝鏈瘒鏂囩珷鍙叧娉ㄨ鏁版嵁缁撴瀯濡備綍鏉ョ粍缁囧拰绠$悊杩涚▼ID鐨勩
-
-#杩涚▼ID姒傝堪
--------
-
-##杩涚▼ID绫诲瀷
--------
-
-瑕佹兂浜嗚В鍐呮牳濡備綍鏉ョ粍缁囧拰绠$悊杩涚▼ID锛屽厛瑕佺煡閬撹繘绋婭D鐨勭被鍨嬶細
-
-鍐呮牳涓繘绋婭D鐨勭被鍨嬬敤[pid_type](http://lxr.free-electrons.com/source/include/linux/pid.h#L6)鏉ユ弿杩,瀹冭瀹氫箟鍦╗include/linux/pid.h](http://lxr.free-electrons.com/source/include/linux/pid.h)涓
-
-```c
-enum pid_type
-{
- PIDTYPE_PID,
- PIDTYPE_PGID,
- PIDTYPE_SID,
- PIDTYPE_MAX
-};
-```
-
-* **PID** 鍐呮牳鍞竴鍖哄垎姣忎釜杩涚▼鐨勬爣璇
-
-
-pid鏄 Linux 涓湪鍏跺懡鍚嶇┖闂翠腑鍞竴鏍囪瘑杩涚▼鑰屽垎閰嶇粰瀹冪殑涓涓彿鐮侊紝绉板仛杩涚▼ID鍙凤紝绠绉癙ID銆傚湪浣跨敤 fork 鎴 clone 绯荤粺璋冪敤鏃朵骇鐢熺殑杩涚▼鍧囦細鐢卞唴鏍稿垎閰嶄竴涓柊鐨勫敮涓鐨凱ID鍊
-
-
-杩欎釜pid鐢ㄤ簬鍐呮牳鍞竴鐨勫尯鍒嗘瘡涓繘绋
-
->娉ㄦ剰瀹冨苟涓嶆槸鎴戜滑鐢ㄦ埛绌洪棿閫氳繃getpid( )鎵鑾峰彇鍒扮殑閭d釜杩涚▼鍙凤紝鑷充簬鍘熷洜涔堬紝鎺ョ潃寰涓嬬湅
-
-* **TGID** 绾跨▼缁勶紙杞婚噺绾ц繘绋嬬粍锛夌殑ID鏍囪瘑
-
-鍦ㄤ竴涓繘绋嬩腑锛屽鏋滀互CLONE_THREAD鏍囧織鏉ヨ皟鐢╟lone寤虹珛鐨勮繘绋嬪氨鏄杩涚▼鐨勪竴涓嚎绋嬶紙鍗宠交閲忕骇杩涚▼锛孡inux鍏跺疄娌℃湁涓ユ牸鐨勮繘绋嬫蹇碉級锛屽畠浠浜庝竴涓嚎绋嬬粍锛
-
-
-璇ョ嚎绋嬬粍鐨勬墍鏈夌嚎绋嬬殑ID鍙仛TGID銆傚浜庣浉鍚岀殑绾跨▼缁勪腑鐨勬墍鏈夎繘绋嬮兘鏈夌浉鍚岀殑TGID锛屼絾鏄敱浜庝粬浠槸涓嶅悓鐨勮繘绋嬶紝鍥犳鍏秔id鍚勪笉鐩稿悓锛涚嚎绋嬬粍缁勯暱锛堜篃鍙富绾跨▼锛夌殑TGID涓庡叾PID鐩稿悓锛涗竴涓繘绋嬫病鏈変娇鐢ㄧ嚎绋嬶紝鍒欏叾TGID涓嶱ID涔熺浉鍚屻
-
-
-* **PGID**
-
-鍙﹀锛鐙珛鐨勮繘绋嬪彲浠ョ粍鎴愯繘绋嬬粍锛堜娇鐢╯etpgrp绯荤粺璋冪敤锛夛紝杩涚▼缁勫彲浠ョ畝鍖栧悜鎵鏈夌粍鍐呰繘绋嬪彂閫佷俊鍙风殑鎿嶄綔
-
-渚嬪鐢ㄧ閬撹繛鎺ョ殑杩涚▼澶勫湪鍚屼竴杩涚▼缁勫唴銆傝繘绋嬬粍ID鍙仛PGID锛岃繘绋嬬粍鍐呯殑鎵鏈夎繘绋嬮兘鏈夌浉鍚岀殑PGID锛岀瓑浜庤缁勭粍闀跨殑PID銆
-
-* **SID**
-
-鍑犱釜杩涚▼缁勫彲浠ュ悎骞舵垚涓涓細璇濈粍锛堜娇鐢╯etsid绯荤粺璋冪敤锛夛紝鍙互鐢ㄤ簬缁堢绋嬪簭璁捐銆備細璇濈粍涓墍鏈夎繘绋嬮兘鏈夌浉鍚岀殑SID,淇濆瓨鍦╰ask_struct鐨剆ession鎴愬憳涓
-
-
-##PID鍛藉悕绌洪棿
--------
-
-###pid鍛藉悕绌洪棿姒傝堪
--------
-
-鍛藉悕绌洪棿鏄负鎿嶄綔绯荤粺灞傞潰鐨勮櫄鎷熷寲鏈哄埗鎻愪緵鏀拺锛岀洰鍓嶅疄鐜扮殑鏈夊叚绉嶄笉鍚岀殑鍛藉悕绌洪棿锛屽垎鍒负mount鍛藉悕绌洪棿銆乁TS鍛藉悕绌洪棿銆両PC鍛藉悕绌洪棿銆佺敤鎴峰懡鍚嶇┖闂淬丳ID鍛藉悕绌洪棿銆佺綉缁滃懡鍚嶇┖闂淬傚懡鍚嶇┖闂寸畝鍗曟潵璇存彁渚涚殑鏄鍏ㄥ眬璧勬簮鐨勪竴绉嶆娊璞★紝灏嗚祫婧愭斁鍒颁笉鍚岀殑瀹瑰櫒涓紙涓嶅悓鐨勫懡鍚嶇┖闂达級锛屽悇瀹瑰櫒褰兼闅旂銆
-
->鍏充簬鍛藉悕绌洪棿鐨勮缁嗕俊鎭紝璇峰弬瑙
-
-鍛藉悕绌洪棿鏈夌殑杩樻湁灞傛鍏崇郴锛屽PID鍛藉悕绌洪棿
-
-
-
-
-
-
->鍦ㄤ笂鍥炬湁鍥涗釜鍛藉悕绌洪棿锛屼竴涓埗鍛藉悕绌洪棿琛嶇敓浜嗕袱涓瓙鍛藉悕绌洪棿锛屽叾涓殑涓涓瓙鍛藉悕绌洪棿鍙堣鐢熶簡涓涓瓙鍛藉悕绌洪棿銆備互PID鍛藉悕绌洪棿涓轰緥锛岀敱浜庡悇涓懡鍚嶇┖闂村郊姝ら殧绂伙紝鎵浠ユ瘡涓懡鍚嶇┖闂撮兘鍙互鏈 PID 鍙蜂负 1 鐨勮繘绋嬶紱浣嗗張鐢变簬鍛藉悕绌洪棿鐨勫眰娆℃э紝鐖跺懡鍚嶇┖闂存槸鐭ラ亾瀛愬懡鍚嶇┖闂寸殑瀛樺湪锛屽洜姝ゅ瓙鍛藉悕绌洪棿瑕佹槧灏勫埌鐖跺懡鍚嶇┖闂翠腑鍘伙紝鍥犳涓婂浘涓 level 1 涓袱涓瓙鍛藉悕绌洪棿鐨勫叚涓繘绋嬪垎鍒槧灏勫埌鍏剁埗鍛藉悕绌洪棿鐨凱ID 鍙5~10銆
-
-###灞閮↖D鍜屽叏灞ID
--------
-
-
-鍛藉悕绌洪棿澧炲姞浜哖ID绠$悊鐨勫鏉傛с
-
-
-鍥炴兂涓涓嬶紝PID鍛藉悕绌洪棿鎸夊眰娆$粍缁囥傚湪寤虹珛涓涓柊鐨勫懡鍚嶇┖闂存椂锛岃鍛藉悕绌洪棿涓殑鎵鏈塒ID瀵圭埗鍛藉悕绌洪棿閮芥槸鍙鐨勶紝浣嗗瓙鍛藉悕绌洪棿鏃犳硶鐪嬪埌鐖跺懡鍚嶇┖闂寸殑PID銆備絾杩欐剰鍛崇潃鏌愪簺杩涚▼鍏锋湁澶氫釜PID锛屽嚒鍙互鐪嬪埌璇ヨ繘绋嬬殑鍛藉悕绌洪棿锛岄兘浼氫负鍏跺垎閰嶄竴涓狿ID銆 杩欏繀椤诲弽鏄犲湪鏁版嵁缁撴瀯涓傛垜浠繀椤诲尯鍒**灞閮↖D**鍜**鍏ㄥ眬ID**
-
-
-
-鍏ㄥ眬PID鍜孴GID鐩存帴淇濆瓨鍦╗`task_struct`](http://lxr.free-electrons.com/source/include/linux/sched.h#L1389)涓紝鍒嗗埆鏄痶ask_struct鐨刞pid`鍜宍tgid`鎴愬憳锛
-
-
-* **鍏ㄥ眬ID** 鍦ㄥ唴鏍告湰韬拰鍒濆鍛藉悕绌洪棿涓敮涓鐨処D锛屽湪绯荤粺鍚姩鏈熼棿寮濮嬬殑 init 杩涚▼鍗冲睘浜庤鍒濆鍛藉悕绌洪棿銆傜郴缁熶腑姣忎釜杩涚▼閮藉搴斾簡璇ュ懡鍚嶇┖闂寸殑涓涓狿ID锛屽彨鍏ㄥ眬ID锛屼繚璇佸湪鏁翠釜绯荤粺涓敮涓銆
-
-* **灞閮↖D** 瀵逛簬灞炰簬鏌愪釜鐗瑰畾鐨勫懡鍚嶇┖闂达紝瀹冨湪鍏跺懡鍚嶇┖闂村唴鍒嗛厤鐨処D涓哄眬閮↖D锛岃ID涔熷彲浠ュ嚭鐜板湪鍏朵粬鐨勫懡鍚嶇┖闂翠腑銆
-
-```c
-
-struct task_struct
-{
- //...
- pid_t pid;
- pid_t tgid;
- //...
-}
-```
-
-涓ら」閮芥槸pid_t绫诲瀷锛岃绫诲瀷瀹氫箟涓篲_kernel_pid_t锛屽悗鑰呯敱鍚勪釜浣撶郴缁撴瀯鍒嗗埆瀹氫箟銆傞氬父瀹氫箟涓篿nt锛屽嵆鍙互鍚屾椂浣跨敤232涓笉鍚岀殑ID銆
-
-浼氳瘽session鍜岃繘绋媑roup缁処D涓嶆槸鐩存帴鍖呭惈鍦╰ask_struct鏈韩涓紝浣嗕繚瀛樺湪鐢ㄤ簬淇″彿澶勭悊鐨勭粨鏋勪腑銆
-
-
-
->task_ struct->signal->__session琛ㄧず鍏ㄥ眬SID锛
->
->鑰屽叏灞PGID鍒欎繚瀛樺湪task_struct->signal->__pgrp銆
->
->杈呭姪鍑芥暟set_task_session鍜宻et_task_pgrp鍙敤浜庝慨鏀硅繖浜涘笺
-
-
-闄や簡杩欎袱涓瓧娈典箣澶栵紝鍐呮牳杩橀渶瑕佹壘涓涓姙娉曟潵绠$悊鎵鏈夊懡鍚嶇┖闂村唴閮ㄧ殑灞閮ㄩ噺锛屼互鍙婂叾浠朓D锛堝TID鍜孲ID锛夈傝繖闇瑕佸嚑涓浉浜掕繛鎺ョ殑鏁版嵁缁撴瀯锛屼互鍙婅澶氳緟鍔╁嚱鏁帮紝骞跺皢鍦ㄤ笅鏂囪璁恒
-
-涓嬫枃鎴戝皢浣跨敤ID鎸囦唬鎻愬埌鐨勪换浣曡繘绋婭D銆傚湪蹇呰鐨勬儏鍐典笅锛屾垜浼氭槑纭湴璇存槑ID绫诲瀷锛堜緥濡傦紝TGID锛屽嵆绾跨▼缁処D锛夈
-
-涓涓皬鍨嬬殑瀛愮郴缁熺О涔嬩负PID鍒嗛厤鍣紙pid allocator锛夌敤浜庡姞閫熸柊ID鐨勫垎閰嶃傛澶栵紝鍐呮牳闇瑕佹彁渚涜緟鍔╁嚱鏁帮紝浠ュ疄鐜伴氳繃ID鍙婂叾绫诲瀷鏌ユ壘杩涚▼鐨則ask_struct鐨勫姛鑳斤紝浠ュ強灏咺D鐨勫唴鏍歌〃绀哄舰寮忓拰鐢ㄦ埛绌洪棿鍙鐨勬暟鍊艰繘琛岃浆鎹㈢殑鍔熻兘銆
-
-
-
-###PID鍛藉悕绌洪棿鏁版嵁缁撴瀯pid_namespace
-
--------
-
-
-
-鍦ㄤ粙缁嶈〃绀篒D鏈韩鎵闇鐨勬暟鎹粨鏋勪箣鍓嶏紝鎴戦渶瑕佽璁篜ID鍛藉悕绌洪棿鐨勮〃绀烘柟寮忋傛垜浠墍闇鏌ョ湅鐨勪唬鐮佸涓嬫墍绀猴細
-
-[pid_namespace](http://lxr.free-electrons.com/source/include/linux/pid_namespace.h#L24)鐨勫畾涔夊湪[include/linux/pid_namespace.h](http://lxr.free-electrons.com/source/include/linux/pid_namespace.h#L24)涓
-
-鍛藉悕绌洪棿鐨勭粨鏋勫涓
-
-```c
-struct pid_namespace
-{
-
- struct kref kref;
- struct pidmap pidmap[PIDMAP_ENTRIES];
- int last_pid;
- struct task_struct *child_reaper;
- struct kmem_cache *pid_cachep;
- unsigned int level;
- struct pid_namespace *parent;
-};
-```
-
->鎴戜滑杩欓噷鍙叧蹇冨叾涓殑child_reaper锛宭evel鍜宲arent杩欎笁涓瓧娈
-
-
-| 瀛楁| 鎻忚堪 |
-| ------------- |:-------------:|
-| kref | 琛ㄧず鎸囧悜pid_namespace鐨勪釜鏁 |
-| pidmap | pidmap缁撴瀯浣撹〃绀哄垎閰峱id鐨勪綅鍥俱傚綋闇瑕佸垎閰嶄竴涓柊鐨刾id鏃跺彧闇鏌ユ壘浣嶅浘锛屾壘鍒癰it涓0鐨勪綅缃苟缃1锛岀劧鍚庢洿鏂扮粺璁℃暟鎹煙锛坣r_free) |
-| last_pid | 鐢ㄤ簬pidmap鐨勫垎閰嶃傛寚鍚戞渶鍚庝竴涓垎閰嶇殑pid鐨勪綅缃(涓嶆槸鐗瑰埆纭畾锛墊
-| child_reaper | 鎸囧悜鐨勬槸褰撳墠鍛藉悕绌洪棿鐨刬nit杩涚▼锛屾瘡涓懡鍚嶇┖闂撮兘鏈変竴涓綔鐢ㄧ浉褰撲簬鍏ㄥ眬init杩涚▼鐨勮繘绋 |
-| pid_cachep | 鍩熸寚鍚戝垎閰峱id鐨剆lab鐨勫湴鍧銆倈
-| level | 浠h〃褰撳墠鍛藉悕绌洪棿鐨勭瓑绾э紝鍒濆鍛藉悕绌洪棿鐨刲evel涓0锛屽畠鐨勫瓙鍛藉悕绌洪棿level涓1锛屼緷娆¢掑锛岃屼笖瀛愬懡鍚嶇┖闂村鐖跺懡鍚嶇┖闂存槸鍙鐨勩備粠缁欏畾鐨刲evel璁剧疆锛屽唴鏍稿嵆鍙帹鏂繘绋嬩細鍏宠仈鍒板灏戜釜ID銆倈
-| parent | 鎸囧悜鐖跺懡鍚嶇┖闂寸殑鎸囬拡 |
-
-
-
-
-瀹為檯涓奝ID鍒嗛厤鍣ㄤ篃闇瑕佷緷闈犺缁撴瀯鐨勬煇浜涢儴鍒嗘潵杩炵画鐢熸垚鍞竴ID锛屼絾鎴戜滑鐩墠瀵规鏃犻渶鍏虫敞銆傛垜浠笂杩颁唬鐮佷腑缁欏嚭鐨勪笅鍒楁垚鍛樻洿鎰熷叴瓒c
-
-姣忎釜PID鍛藉悕绌洪棿閮藉叿鏈変竴涓繘绋嬶紝鍏跺彂鎸ョ殑浣滅敤鐩稿綋浜庡叏灞鐨刬nit杩涚▼銆俰nit鐨勪竴涓洰鐨勬槸瀵瑰鍎胯繘绋嬭皟鐢╳ait4锛屽懡鍚嶇┖闂村眬閮ㄧ殑init鍙樹綋涔熷繀椤诲畬鎴愯宸ヤ綔銆
-
-#pid缁撴瀯鎻忚堪
--------
-
-
-##pid涓巙pid
--------
-
-PID鐨勭鐞嗗洿缁曚袱涓暟鎹粨鏋勫睍寮锛
-
-* [struct pid](http://lxr.free-electrons.com/source/include/linux/pid.h#L57)鏄唴鏍稿PID鐨勫唴閮ㄨ〃绀猴紝
-
-* [struct upid](http://lxr.free-electrons.com/source/include/linux/pid.h#L50)鍒欒〃绀虹壒瀹氱殑鍛藉悕绌洪棿涓彲瑙佺殑淇℃伅銆
-
-
-
-涓や釜缁撴瀯鐨勫畾涔夊湪[include/linux/pid.h](include/linux/pid.h)涓
-
-
-
-```c
-struct upid
-{
- /* Try to keep pid_chain in the same cacheline as nr for find_vpid */
- int nr;
- struct pid_namespace *ns;
- struct hlist_node pid_chain;
-};
-```
-
-| 瀛楁| 鎻忚堪 |
-| ------------- |:-------------:|
-| nr | 琛ㄧずID鍏蜂綋鐨勫 |
-| ns | 鎸囧悜鍛藉悕绌洪棿鐨勬寚閽 |
-| pid_chain | 鎸囧悜PID鍝堝笇鍒楄〃鐨勬寚閽堬紝鐢ㄤ簬鍏宠仈瀵逛簬鐨凱ID |
-
-
->鎵鏈夌殑upid瀹炰緥閮戒繚瀛樺湪涓涓暎鍒楄〃涓紝绋嶅悗鎴戜滑浼氱湅鍒拌缁撴瀯銆
-
-```c
-struct pid
-{
- atomic_t count;
- /* 浣跨敤璇id鐨勮繘绋嬬殑鍒楄〃锛 lists of tasks that use this pid */
- struct hlist_head tasks[PIDTYPE_MAX];
- int level;
- struct upid numbers[1];
-};
-```
-
-| 瀛楁| 鎻忚堪 |
-| ------------- |:-------------:|
-| count | 鏄寚浣跨敤璇ID鐨則ask鐨勬暟鐩紱|
-| level | 琛ㄧず鍙互鐪嬪埌璇ID鐨勫懡鍚嶇┖闂寸殑鏁扮洰锛屼篃灏辨槸鍖呭惈璇ヨ繘绋嬬殑鍛藉悕绌洪棿鐨勬繁搴 |
-| tasks[PIDTYPE_MAX] | 鏄竴涓暟缁勶紝姣忎釜鏁扮粍椤归兘鏄竴涓暎鍒楄〃澶,鍒嗗埆瀵瑰簲浠ヤ笅涓夌绫诲瀷
-| numbers[1] | 涓涓猽pid鐨勫疄渚嬫暟缁勶紝姣忎釜鏁扮粍椤逛唬琛ㄤ竴涓懡鍚嶇┖闂达紝鐢ㄦ潵琛ㄧず涓涓狿ID鍙互灞炰簬涓嶅悓鐨勫懡鍚嶇┖闂达紝璇ュ厓绱犳斁鍦ㄦ湯灏撅紝鍙互鍚戞暟缁勬坊鍔犻檮鍔犵殑椤广倈
-
->tasks鏄竴涓暟缁勶紝姣忎釜鏁扮粍椤归兘鏄竴涓暎鍒楄〃澶达紝瀵瑰簲浜庝竴涓狪D绫诲瀷,PIDTYPE_PID, PIDTYPE_PGID, PIDTYPE_SID锛 PIDTYPE_MAX琛ㄧずID绫诲瀷鐨勬暟鐩級杩欐牱鍋氭槸蹇呰鐨勶紝鍥犱负涓涓狪D鍙兘鐢ㄤ簬鍑犱釜杩涚▼銆傛墍鏈夊叡浜悓涓缁欏畾ID鐨則ask_struct瀹炰緥锛岄兘閫氳繃璇ュ垪琛ㄨ繛鎺ヨ捣鏉ャ
->
->杩欎釜鏋氫妇甯搁噺PIDTYPE_MAX锛屾濂芥槸pid_type绫诲瀷鐨勬暟鐩紝杩欓噷linux鍐呮牳浣跨敤浜嗕竴涓皬鎶宸ф潵鐢辩紪璇戝櫒鏉ヨ嚜鍔ㄧ敓鎴恑d绫诲瀷鐨勬暟鐩
-
-
-
-姝ゅ锛岃繕鏈変袱涓粨鏋勬垜浠渶瑕佽鏄庯紝灏辨槸pidmap鍜宲id_link
-
-* pidmap褰撻渶瑕佸垎閰嶄竴涓柊鐨刾id鏃舵煡鎵惧彲浣跨敤pid鐨勪綅鍥撅紝鍏跺畾涔夊涓
-
-* 鑰宲id_link鍒欐槸pid鐨勫搱甯岃〃瀛樺偍缁撴瀯
-
-##pidmap鐢ㄤ簬鍒嗛厤pid鐨勪綅鍥
--------
-
-```c
-struct pidmap
-{
- atomic_t nr_free;
- void *page;
-};
-```
-
-| 瀛楁| 鎻忚堪 |
-| ------------- |:-------------:|
-| nr_free | 琛ㄧず杩樿兘鍒嗛厤鐨刾id鐨勬暟閲 |
-| page | 鎸囧悜鐨勬槸瀛樻斁pid鐨勭墿鐞嗛〉 |
-
-
-
->pidmap[PIDMAP_ENTRIES]鍩熻〃绀鸿pid_namespace涓媝id宸插垎閰嶆儏鍐
-
-##pid_link鍝堝笇琛ㄥ瓨鍌
--------
-
-pids[PIDTYPE_MAX]鎸囧悜浜嗗拰璇ask_struct鐩稿叧鐨刾id缁撴瀯浣撱
-pid_link鐨勫畾涔夊涓
-```c
-struct pid_link
-{
-struct hlist_node node;
-struct pid *pid;
-};
-```
-
-
-
-##task_struct涓繘绋婭D鐩稿叧鏁版嵁缁撴瀯
--------
-
-##task_struct涓殑鎻忚堪绗︿俊鎭
--------
-```c
-struct task_struct
-{
- //...
- pid_t pid;
- pid_t tgid;
- struct task_struct *group_leader;
- struct pid_link pids[PIDTYPE_MAX];
- struct nsproxy *nsproxy;
- //...
-};
-```
-| 瀛楁| 鎻忚堪 |
-| ------------- |:-------------:|
-| pid | 鎸囪杩涚▼鐨勮繘绋嬫弿杩扮銆傚湪fork鍑芥暟涓鍏惰繘琛岃祴鍊肩殑 |
-| tgid | 鎸囪杩涚▼鐨勭嚎绋嬫弿杩扮銆傚湪linux鍐呮牳涓绾跨▼骞舵病鏈夊仛鐗规畩鐨勫鐞嗭紝杩樻槸鐢眛ask_struct鏉ョ鐞嗐傛墍浠ヤ粠鍐呮牳鐨勮搴︾湅锛 鐢ㄦ埛鎬佺殑绾跨▼鏈川涓婅繕鏄竴涓繘绋嬨傚浜庡悓涓涓繘绋嬶紙鐢ㄦ埛鎬佽搴︼級涓笉鍚岀殑绾跨▼鍏秚gid鏄浉鍚岀殑锛屼絾鏄痯id鍚勪笉鐩稿悓銆 涓荤嚎绋嬪嵆group_leader锛堜富绾跨▼浼氬垱寤哄叾浠栨墍鏈夌殑瀛愮嚎绋嬶級銆傚鏋滄槸鍗曠嚎绋嬭繘绋嬶紙鐢ㄦ埛鎬佽搴︼級锛屽畠鐨刾id绛変簬tgid銆倈
-| group_leader | 闄や簡鍦ㄥ绾跨▼鐨勬ā寮忎笅鎸囧悜涓荤嚎绋嬶紝杩樻湁涓涓敤澶勶紝 褰撲竴浜涜繘绋嬬粍鎴愪竴涓兢缁勬椂锛圥IDTYPE_PGID)锛 璇ュ煙鎸囧悜璇ョ兢缁勭殑leader |
-| nsproxy | 鎸囬拡鎸囧悜namespace鐩稿叧鐨勫煙锛岄氳繃nsproxy鍩熷彲浠ョ煡閬撹task_struct灞炰簬鍝釜pid_namespace |
-
->瀵逛簬鐢ㄦ埛鎬佺▼搴忔潵璇达紝璋冪敤getpid锛堬級鍑芥暟鍏跺疄杩斿洖鐨勬槸tgid锛屽洜姝ょ嚎绋嬬粍涓殑杩涚▼id搴旇鏄槸涓鑷寸殑锛屼絾鏄粬浠琾id涓嶄竴鑷达紝杩欎篃鏄唴鏍稿尯鍒嗕粬浠殑鏍囪瘑
-
-
-
-1. 澶氫釜task_struct鍙互鍏辩敤涓涓狿ID
-
-2. 涓涓狿ID鍙互灞炰簬涓嶅悓鐨勫懡鍚嶇┖闂
-
-3. 褰撻渶瑕佸垎閰嶄竴涓柊鐨刾id鏃跺欙紝鍙渶瑕佹煡鎵緋idmap浣嶅浘鍗冲彲
-4.
-閭d箞鏈缁堬紝linux涓嬭繘绋嬪懡鍚嶇┖闂村拰杩涚▼鐨勫叧绯荤粨鏋勫涓嬶細
-
-
-鍙互鐪嬪埌锛屽涓猼ask_struct鎸囧悜涓涓狿ID锛屽悓鏃禤ID鐨刪ash鏁扮粍閲屽畨瑁呬笉鍚岀殑绫诲瀷瀵箃ask杩涜鏁e垪锛屽苟涓斾竴涓狿ID浼氬睘浜庡涓懡鍚嶇┖闂淬
-
-
-
-#鍐呮牳鏄浣曡璁ask_struct涓繘绋婭D鐩稿叧鏁版嵁缁撴瀯鐨
--------
-
->鏈儴鍐呭杈冨鐨勯噰鐢ㄤ簡[Linux 鍐呮牳杩涚▼绠$悊涔嬭繘绋婭D](http://www.cnblogs.com/hazir/p/linux_kernel_pid.html)
-
-Linux 鍐呮牳鍦ㄨ璁$鐞咺D鐨勬暟鎹粨鏋勬椂锛岃鍏呭垎鑰冭檻浠ヤ笅鍥犵礌锛
-
-1. 濡備綍蹇熷湴鏍规嵁杩涚▼鐨 task_struct銆両D绫诲瀷銆佸懡鍚嶇┖闂存壘鍒板眬閮↖D
-
-2. 濡備綍蹇熷湴鏍规嵁灞閮↖D銆佸懡鍚嶇┖闂淬両D绫诲瀷鎵惧埌瀵瑰簲杩涚▼鐨 task_struct
-
-3. 濡備綍蹇熷湴缁欐柊杩涚▼鍦ㄥ彲瑙佺殑鍛藉悕绌洪棿鍐呭垎閰嶄竴涓敮涓鐨 PID
-
-濡傛灉灏嗘墍鏈夊洜绱犺冭檻鍒颁竴璧凤紝灏嗕細寰堝鏉傦紝涓嬮潰灏嗕細鐢辩畝鍒扮箒璁捐璇ョ粨鏋勩
-
-##涓涓狿ID瀵瑰簲涓涓猼ask鏃剁殑task_struct璁捐
--------
-
-涓涓狿ID瀵瑰簲涓涓猔task_struct`濡傛灉鍏堜笉鑰冭檻杩涚▼涔嬮棿鐨勫叧绯伙紝涓嶈冭檻鍛藉悕绌洪棿锛屼粎浠呮槸涓涓狿ID鍙峰搴斾竴涓猔task_struct`锛岄偅涔堟垜浠彲浠ヨ璁¤繖鏍风殑鏁版嵁缁撴瀯
-
-```c
-struct task_struct
-{
- //...
- struct pid_link pids;
- //...
-};
-
-struct pid_link
-{
- struct hlist_node node;
- struct pid *pid;
-};
-
-struct pid
-{
- struct hlist_head tasks; //鎸囧洖 pid_link 鐨 node
- int nr; //PID
- struct hlist_node pid_chain; //pid hash 鏁e垪琛ㄧ粨鐐
-};
-```
-姣忎釜杩涚▼鐨 task_struct 缁撴瀯浣撲腑鏈変竴涓寚鍚 pid 缁撴瀯浣撶殑鎸囬拡锛宲id缁撴瀯浣撳寘鍚簡PID鍙枫
-
-缁撴瀯绀烘剰鍥惧鍥
-
-
-
-
-#濡備綍蹇熷湴鏍规嵁灞閮↖D銆佸懡鍚嶇┖闂淬両D绫诲瀷鎵惧埌瀵瑰簲杩涚▼鐨 task_struct
--------
-鍥句腑杩樻湁涓や釜缁撴瀯涓婇潰鏈彁鍙婏細
-
->* pid_hash[]
->
->杩欐槸涓涓猦ash琛ㄧ殑缁撴瀯锛屾牴鎹畃id鐨刵r鍊煎搱甯屽埌鍏舵煇涓〃椤癸紝鑻ユ湁澶氫釜 pid 缁撴瀯瀵瑰簲鍒板悓涓涓〃椤癸紝杩欓噷瑙e喅鍐茬獊浣跨敤鐨勬槸鏁e垪琛ㄦ硶銆
-
-杩欐牱锛屽氨鑳借В鍐冲紑濮嬫彁鍑虹殑绗2涓棶棰樹簡锛屾牴鎹甈ID鍊兼庢牱蹇熷湴鎵惧埌task_struct缁撴瀯浣擄細
-
-1. 棣栧厛閫氳繃 PID 璁$畻 pid 鎸傛帴鍒板搱甯岃〃 pid_hash[] 鐨勮〃椤
-
-2. 閬嶅巻璇ヨ〃椤癸紝鎵惧埌 pid 缁撴瀯浣撲腑 nr 鍊间笌 PID 鍊肩浉鍚岀殑閭d釜 pid
-
-3. 鍐嶉氳繃璇 pid 缁撴瀯浣撶殑 tasks 鎸囬拡鎵惧埌 node
-
-4. 鏈鍚庢牴鎹唴鏍哥殑 container_of 鏈哄埗灏辫兘鎵惧埌 task_struct 缁撴瀯浣
-
-#濡備綍蹇熷湴缁欐柊杩涚▼鍦ㄥ彲瑙佺殑鍛藉悕绌洪棿鍐呭垎閰嶄竴涓敮涓鐨 PID
--------
-
->* pid_map
->
->杩欐槸涓涓綅鍥撅紝鐢ㄦ潵鍞竴鍒嗛厤PID鍊肩殑缁撴瀯锛屽浘涓伆鑹茶〃绀哄凡缁忓垎閰嶈繃鐨勫硷紝鍦ㄦ柊寤轰竴涓繘绋嬫椂锛屽彧闇鍦ㄥ叾涓壘鍒颁竴涓负鍒嗛厤杩囩殑鍊艰祴缁 pid 缁撴瀯浣撶殑 nr锛屽啀灏唒id_map 涓鍊艰涓哄凡鍒嗛厤鏍囧織銆傝繖涔熷氨瑙e喅浜嗕笂闈㈢殑**绗3涓棶棰樷斺斿浣曞揩閫熷湴鍒嗛厤涓涓叏灞鐨凱ID**
-
-鑷充簬涓婇潰鐨**绗1涓棶棰*灏辨洿鍔犵畝鍗曪紝宸茬煡 task_struct 缁撴瀯浣擄紝鏍规嵁鍏 pid_link 鐨 pid 鎸囬拡鎵惧埌 pid 缁撴瀯浣擄紝鍙栧嚭鍏 nr 鍗充负 PID 鍙枫
-
-##甯﹁繘绋婭D绫诲瀷鐨則ask_struct璁捐
--------
-
-濡傛灉鑰冭檻杩涚▼涔嬮棿鏈夊鏉傜殑鍏崇郴锛屽绾跨▼缁勩佽繘绋嬬粍銆佷細璇濈粍锛岃繖浜涚粍鍧囨湁缁処D锛屽垎鍒负 TGID銆丳GID銆丼ID锛屾墍浠ュ師鏉ョ殑 task_struct 涓璸id_link 鎸囧悜涓涓 pid 缁撴瀯浣撻渶瑕佸鍔犲嚑椤癸紝鐢ㄦ潵鎸囧悜鍒板叾缁勯暱鐨 pid 缁撴瀯浣擄紝鐩稿簲鐨 struct pid 鍘熸湰鍙渶瑕佹寚鍥炲叾 PID 鎵灞炶繘绋嬬殑task_struct锛岀幇鍦ㄨ澧炲姞鍑犻」锛岀敤鏉ラ摼鎺ラ偅浜涗互璇 pid 涓虹粍闀跨殑鎵鏈夎繘绋嬬粍鍐呰繘绋嬨傛暟鎹粨鏋勫涓嬶細
-
->瀹氫箟鍦╤ttp://lxr.free-electrons.com/source/include/linux/sched.h#L1389
-
-
-```c
-enum pid_type
-{
- PIDTYPE_PID,
- PIDTYPE_PGID,
- PIDTYPE_SID,
- PIDTYPE_MAX
-};
-
-struct task_struct
-{
- //...
- pid_t pid; //PID
- pid_t tgid; //thread group id
- //..
- struct pid_link pids[PIDTYPE_MAX];
- struct task_struct *group_leader; // threadgroup leader
- //...
- struct pid_link pids[PIDTYPE_MAX];
- struct nsproxy *nsproxy;
-};
-
-struct pid_link
-{
- struct hlist_node node;
- struct pid *pid;
-};
-
-struct pid
-{
- struct hlist_head tasks[PIDTYPE_MAX];
- int nr; //PID
- struct hlist_node pid_chain; // pid hash 鏁e垪琛ㄧ粨鐐
-};
-```
-
-涓婇潰 ID 鐨勭被鍨 PIDTYPE_MAX 琛ㄧず ID 绫诲瀷鏁扮洰銆備箣鎵浠ヤ笉鍖呮嫭绾跨▼缁処D锛屾槸鍥犱负鍐呮牳涓凡缁忔湁鎸囧悜鍒扮嚎绋嬬粍鐨 task_struct 鎸囬拡 group_leader锛岀嚎绋嬬粍 ID 鏃犻潪灏辨槸 group_leader 鐨凱ID銆
-
-
-鍋囧鐜板湪鏈変笁涓繘绋婣銆丅銆丆涓哄悓涓涓繘绋嬬粍锛岃繘绋嬬粍闀夸负A锛岃繖鏍风殑缁撴瀯绀烘剰鍥惧鍥
-
-![澧炲姞ID绫诲瀷鐨勭粨鏋刔(./澧炲姞ID绫诲瀷鐨勭粨鏋.png)
-
-
-
-鍏充簬涓婂浘鏈夊嚑鐐归渶瑕佽鏄庯細
-
-鍥句腑鐪佸幓浜 pid_hash 浠ュ強 pid_map 缁撴瀯锛屽洜涓虹涓绉嶆儏鍐电被浼硷紱
-
-杩涚▼B鍜孋鐨勮繘绋嬬粍缁勯暱涓篈锛岄偅涔 pids[PIDTYPE_PGID] 鐨 pid 鎸囬拡鎸囧悜杩涚▼A鐨 pid 缁撴瀯浣擄紱
-
-杩涚▼A鏄繘绋婤鍜孋鐨勭粍闀匡紝杩涚▼A鐨 pid 缁撴瀯浣撶殑 tasks[PIDTYPE_PGID] 鏄竴涓暎鍒楄〃鐨勫ご锛屽畠灏嗘墍鏈変互璇id 涓虹粍闀跨殑杩涚▼閾炬帴璧锋潵銆
-
-鍐嶆鍥為【鏈妭鐨勪笁涓熀鏈棶棰橈紝鍦ㄦ缁撴瀯涓婁篃寰堝ソ鍘诲疄鐜般
-
-#杩涗竴姝ュ鍔犺繘绋婸ID鍛藉悕绌洪棿鐨則ask_struct璁捐
--------
-
-鑻ュ湪绗簩绉嶆儏褰笅鍐嶅鍔燩ID鍛藉悕绌洪棿
-
-涓涓繘绋嬪氨鍙兘鏈夊涓狿ID鍊间簡锛屽洜涓哄湪姣忎竴涓彲瑙佺殑鍛藉悕绌洪棿鍐呴兘浼氬垎閰嶄竴涓狿ID锛岃繖鏍峰氨闇瑕佹敼鍙 pid 鐨勭粨鏋勪簡锛屽涓嬶細
-```c
-struct pid
-{
- unsigned int level;
- /* lists of tasks that use this pid */
- struct hlist_head tasks[PIDTYPE_MAX];
- struct upid numbers[1];
-};
-
-struct upid
-{
- int nr;
- struct pid_namespace *ns;
- struct hlist_node pid_chain;
-};
-```
-
-鍦 pid 缁撴瀯浣撲腑澧炲姞浜嗕竴涓〃绀鸿杩涚▼鎵澶勭殑鍛藉悕绌洪棿鐨勫眰娆evel锛屼互鍙婁竴涓彲鎵╁睍鐨 upid 缁撴瀯浣撱傚浜巗truct upid锛岃〃绀哄湪璇ュ懡鍚嶇┖闂存墍鍒嗛厤鐨勮繘绋嬬殑ID锛宯s鎸囧悜鏄ID鎵灞炵殑鍛藉悕绌洪棿锛宲id_chain 琛ㄧず鍦ㄨ鍛藉悕绌洪棿鐨勬暎鍒楄〃銆
-
-涓句緥鏉ヨ锛屽湪level 2 鐨勬煇涓懡鍚嶇┖闂翠笂鏂板缓浜嗕竴涓繘绋嬶紝鍒嗛厤缁欏畠鐨 pid 涓45锛屾槧灏勫埌 level 1 鐨勫懡鍚嶇┖闂达紝鍒嗛厤缁欏畠鐨 pid 涓 134锛涘啀鏄犲皠鍒 level 0 鐨勫懡鍚嶇┖闂达紝鍒嗛厤缁欏畠鐨 pid 涓289锛屽浜庤繖鏍风殑渚嬪瓙锛屽鍥4鎵绀轰负鍏惰〃绀猴細
-
-
-
-
-
-鍥句腑鍏充簬濡傛灉鍒嗛厤鍞竴鐨 PID 娌℃湁鐢诲嚭锛屼絾涔熸槸姣旇緝绠鍗曪紝涓庡墠闈袱绉嶆儏褰笉鍚岀殑鏄紝杩欓噷鍒嗛厤鍞竴鐨 PID 鏄湁鍛藉悕绌洪棿鐨勫鍣ㄧ殑锛屽湪PID鍛藉悕绌洪棿鍐呭繀椤诲敮涓锛屼絾鍚勪釜鍛藉悕绌洪棿涔嬮棿涓嶉渶瑕佸敮涓銆
-鑷虫锛屽凡缁忎笌 Linux 鍐呮牳涓暟鎹粨鏋勭浉宸笉澶氫簡銆
-
-#杩涚▼ID绠$悊鍑芥暟
--------
-
-鏈変簡涓婇潰鐨勫鏉傜殑鏁版嵁缁撴瀯锛屽啀鍔犱笂鏁e垪琛ㄧ瓑鏁版嵁缁撴瀯鐨勬搷浣滐紝灏卞彲浠ュ啓鍑烘垜浠墠闈㈡墍鎻愬埌鐨勪笁涓棶棰樼殑鍑芥暟浜嗭細
-
-##鑾峰緱灞閮↖D
--------
-
-鏍规嵁杩涚▼鐨 task_struct銆両D绫诲瀷銆佸懡鍚嶇┖闂达紝鍙互寰堝鏄撹幏寰楀叾鍦ㄥ懡鍚嶇┖闂村唴鐨勫眬閮↖D
-
-鑾峰緱涓巘ask_struct 鍏宠仈鐨刾id缁撴瀯浣撱傝緟鍔╁嚱鏁版湁 task_pid銆乼ask_tgid銆乼ask_pgrp鍜宼ask_session锛屽垎鍒敤鏉ヨ幏鍙栦笉鍚岀被鍨嬬殑ID鐨刾id 瀹炰緥锛屽鑾峰彇 PID 鐨勫疄渚嬶細
-
-```c
-static inline struct pid *task_pid(struct task_struct *task)
-{
- return task->pids[PIDTYPE_PID].pid;
-}
-```
-
-鑾峰彇绾跨▼缁勭殑ID锛屽墠闈篃璇磋繃锛孴GID涓嶈繃鏄嚎绋嬬粍缁勯暱鐨凱ID鑰屽凡锛屾墍浠ワ細
-```
-static inline struct pid *task_tgid(struct task_struct *task)
-{
- return task->group_leader->pids[PIDTYPE_PID].pid;
-}
-```
-
-鑰岃幏寰桺GID鍜孲ID锛岄鍏堥渶瑕佹壘鍒拌绾跨▼缁勭粍闀跨殑task_struct锛屽啀鑾峰緱鍏剁浉搴旂殑 pid锛
-
-```c
-static inline struct pid *task_pgrp(struct task_struct *task)
-{
- return task->group_leader->pids[PIDTYPE_PGID].pid;
-}
-
-static inline struct pid *task_session(struct task_struct *task)
-{
- return task->group_leader->pids[PIDTYPE_SID].pid;
-}
-```
-
-鑾峰緱 pid 瀹炰緥涔嬪悗锛屽啀鏍规嵁 pid 涓殑numbers 鏁扮粍涓 uid 淇℃伅锛岃幏寰楀眬閮≒ID銆
-
-
-```c
-pid_t pid_nr_ns(struct pid *pid, struct pid_namespace *ns)
-{
- struct upid *upid;
- pid_t nr = 0;
- if (pid && ns->level <= pid->level)
- {
- upid = &pid->numbers[ns->level];
- if (upid->ns == ns)
- nr = upid->nr;
- }
- return nr;
-}
-```
-杩欓噷鍊煎緱娉ㄦ剰鐨勬槸锛岀敱浜嶱ID鍛藉悕绌洪棿鐨勫眰娆℃э紝鐖跺懡鍚嶇┖闂磋兘鐪嬪埌瀛愬懡鍚嶇┖闂寸殑鍐呭锛屽弽涔嬪垯涓嶈兘锛屽洜姝わ紝鍑芥暟涓渶瑕佺‘淇濆綋鍓嶅懡鍚嶇┖闂寸殑level 灏忎簬绛変簬浜х敓灞閮≒ID鐨勫懡鍚嶇┖闂寸殑level銆
-
-闄や簡杩欎釜鍑芥暟涔嬪锛屽唴鏍歌繕灏佽浜嗗叾浠栧嚱鏁扮敤鏉ヤ粠 pid 瀹炰緥鑾峰緱 PID 鍊硷紝濡 pid_nr銆乸id_vnr 绛夈傚湪姝や笉浠嬬粛浜嗐
-缁撳悎杩欎袱姝ワ紝鍐呮牳鎻愪緵浜嗘洿杩涗竴姝ョ殑灏佽锛屾彁渚涗互涓嬪嚱鏁帮細
-```c
-pid_t task_pid_nr_ns(struct task_struct *tsk, struct pid_namespace *ns);
-pid_t task_tgid_nr_ns(struct task_struct *tsk, struct pid_namespace *ns);
-pid_t task_pigd_nr_ns(struct task_struct *tsk, struct pid_namespace *ns);
-pid_t task_session_nr_ns(struct task_struct *tsk, struct pid_namespace *ns);
-```
-浠庡嚱鏁板悕涓婂氨鑳芥帹鏂嚱鏁扮殑鍔熻兘锛屽叾瀹炰笉澶栦簬灏佽浜嗕笂闈㈢殑涓ゆ銆
-
-##鏌ユ壘杩涚▼task_struct
--------
-
-鏍规嵁灞閮↖D銆佷互鍙婂懡鍚嶇┖闂达紝鎬庢牱鑾峰緱杩涚▼鐨則ask_struct缁撴瀯浣撳憿锛熶篃鏄垎涓ゆ锛
-鑾峰緱 pid 瀹炰綋銆傛牴鎹眬閮≒ID浠ュ強鍛藉悕绌洪棿璁$畻鍦 pid_hash 鏁扮粍涓殑绱㈠紩锛岀劧鍚庨亶鍘嗘暎鍒楄〃鎵惧埌鎵瑕佺殑 upid锛 鍐嶆牴鎹唴鏍哥殑 container_of 鏈哄埗鎵惧埌 pid 瀹炰緥銆備唬鐮佸涓嬶細
-```
-struct pid *find_pid_ns(int nr, struct pid_namespace *ns)
-{
- struct hlist_node *elem;
- struct upid *pnr;
- //閬嶅巻鏁e垪琛
- hlist_for_each_entry_rcu(pnr, elem,
- &pid_hash[pid_hashfn(nr, ns)], pid_chain) //pid_hashfn() 鑾峰緱hash鐨勭储寮
- if (pnr->nr == nr && pnr->ns == ns) //姣旇緝 nr 涓 ns 鏄惁閮界浉鍚
- return container_of(pnr, struct pid, //鏍规嵁container_of鏈哄埗鍙栧緱pid 瀹炰綋
-
- numbers[ns->level]);
- return NULL;
-}
-```
-
-##鏍规嵁ID绫诲瀷鍙栧緱task_struct 缁撴瀯浣
--------
-```
-struct task_struct *pid_task(struct pid *pid, enum pid_type type)
-{
- struct task_struct *result = NULL;
- if (pid) {
- struct hlist_node *first;
- first = rcu_dereference_check(hlist_first_rcu(&pid->tasks[type]),
- lockdep_tasklist_lock_is_held());
- if (first)
- result = hlist_entry(first, struct task_struct, pids[(type)].node);
- }
-
- return result;
-}
-```
-
-鍐呮牳杩樻彁渚涘叾瀹冨嚱鏁扮敤鏉ュ疄鐜颁笂闈袱姝ワ細
-```c
-struct task_struct *find_task_by_pid_ns(pid_t nr, struct pid_namespace *ns);
-struct task_struct *find_task_by_vpid(pid_t vnr);
-struct task_struct *find_task_by_pid(pid_t vnr);
-```
-
-鍏蜂綋鍑芥暟瀹炵幇鐨勫姛鑳戒篃姣旇緝绠鍗曘
-
-##鐢熸垚鍞竴鐨凱ID
--------
-
-鍐呮牳涓娇鐢ㄤ笅闈袱涓嚱鏁版潵瀹炵幇鍒嗛厤鍜屽洖鏀禤ID鐨勶細
-```c
-static int alloc_pidmap(struct pid_namespace *pid_ns);
-static void free_pidmap(struct upid *upid);
-```
-
-鍦ㄨ繖閲屾垜浠笉鍏虫敞杩欎袱涓嚱鏁扮殑瀹炵幇锛屽弽鑰屽簲璇ュ叧娉ㄥ垎閰嶇殑 PID 濡備綍鍦ㄥ涓懡鍚嶇┖闂翠腑鍙锛岃繖鏍烽渶瑕佸湪姣忎釜鍛藉悕绌洪棿鐢熸垚涓涓眬閮↖D锛屽嚱鏁 alloc_pid 涓烘柊寤虹殑杩涚▼鍒嗛厤PID锛岀畝鍖栫増濡備笅锛
-```c
-struct pid *alloc_pid(struct pid_namespace *ns)
-{
- struct pid *pid;
- enum pid_type type;
- int i, nr;
- struct pid_namespace *tmp;
- struct upid *upid;
- tmp = ns;
- pid->level = ns->level;
- // 鍒濆鍖 pid->numbers[] 缁撴瀯浣
- for (i = ns->level; i >= 0; i--)
- {
- nr = alloc_pidmap(tmp); //鍒嗛厤涓涓眬閮↖D
- pid->numbers[i].nr = nr;
- pid->numbers[i].ns = tmp;
- tmp = tmp->parent;
- }
- // 鍒濆鍖 pid->task[] 缁撴瀯浣
- for (type = 0; type < PIDTYPE_MAX; ++type)
- INIT_HLIST_HEAD(&pid->tasks[type]);
-
- // 灏嗘瘡涓懡鍚嶇┖闂寸粡杩囧搱甯屼箣鍚庡姞鍏ュ埌鏁e垪琛ㄤ腑
- upid = pid->numbers + ns->level;
- for ( ; upid >= pid->numbers; --upid)
- {
- hlist_add_head_rcu(&upid->pid_chain, &pid_hash[pid_hashfn(upid->nr, upid->ns)]);
- upid->ns->nr_hashed++;
- }
-
- return pid;
-}
-```
diff --git a/study/process/pid/进程命名空间和进程的关系结构.png b/study/process/pid/进程命名空间和进程的关系结构.png
deleted file mode 100644
index f89248b..0000000
Binary files a/study/process/pid/进程命名空间和进程的关系结构.png and /dev/null differ
diff --git a/study/process/pid/命名空间的层次关系图.jpg b/study/process/pid/命名空间的层次关系图.jpg
deleted file mode 100644
index 1060cf0..0000000
Binary files a/study/process/pid/命名空间的层次关系图.jpg and /dev/null differ
diff --git a/study/process/pid/一个task_struct对应一个PID.png b/study/process/pid/一个task_struct对应一个PID.png
deleted file mode 100644
index 77b9356..0000000
Binary files a/study/process/pid/一个task_struct对应一个PID.png and /dev/null differ
diff --git a/study/process/pid/增加ID类型的结构.png b/study/process/pid/增加ID类型的结构.png
deleted file mode 100644
index f128fa0..0000000
Binary files a/study/process/pid/增加ID类型的结构.png and /dev/null differ
diff --git a/study/process/pid/增加PID命名空间之后的结构图.png b/study/process/pid/增加PID命名空间之后的结构图.png
deleted file mode 100644
index 09f71da..0000000
Binary files a/study/process/pid/增加PID命名空间之后的结构图.png and /dev/null differ