From e7f5cf6f3d04b91bc57f6279c755f681ce2f726f Mon Sep 17 00:00:00 2001 From: gatieme Date: Wed, 11 May 2016 16:49:30 +0800 Subject: [PATCH] ... --- study/process/{pid => kernel_thead}/Makefile | 2 +- .../kernel_thread.c} | 39 +- study/process/namespace/namespace.md | 164 +++++ study/process/pid/.get_pid.o.d | 178 ----- study/process/pid/PID命名空间.png | Bin 0 -> 16740 bytes study/process/pid/pid.md | 645 ++++++++++++++++++ .../pid/进程命名空间和进程的关系结构.png | Bin 0 -> 55374 bytes study/process/pid/命名空间的层次关系图.jpg | Bin 0 -> 36566 bytes .../pid/一个task_struct对应一个PID.png | Bin 0 -> 14573 bytes study/process/pid/增加ID类型的结构.png | Bin 0 -> 31639 bytes .../pid/增加PID命名空间之后的结构图.png | Bin 0 -> 64592 bytes 11 files changed, 831 insertions(+), 197 deletions(-) rename study/process/{pid => kernel_thead}/Makefile (86%) rename study/process/{pid/get_pid.c => kernel_thead/kernel_thread.c} (59%) create mode 100644 study/process/namespace/namespace.md delete mode 100644 study/process/pid/.get_pid.o.d create mode 100644 study/process/pid/PID命名空间.png create mode 100644 study/process/pid/pid.md create mode 100644 study/process/pid/进程命名空间和进程的关系结构.png create mode 100644 study/process/pid/命名空间的层次关系图.jpg create mode 100644 study/process/pid/一个task_struct对应一个PID.png create mode 100644 study/process/pid/增加ID类型的结构.png create mode 100644 study/process/pid/增加PID命名空间之后的结构图.png diff --git a/study/process/pid/Makefile b/study/process/kernel_thead/Makefile similarity index 86% rename from study/process/pid/Makefile rename to study/process/kernel_thead/Makefile index 89949a4..aa1be5b 100644 --- a/study/process/pid/Makefile +++ b/study/process/kernel_thead/Makefile @@ -1,6 +1,6 @@ -obj-m := get_pid.o +obj-m := kernel_thread.o KERNELDIR ?= /lib/modules/$(shell uname -r)/build diff --git a/study/process/pid/get_pid.c b/study/process/kernel_thead/kernel_thread.c similarity index 59% rename from study/process/pid/get_pid.c rename to study/process/kernel_thead/kernel_thread.c index 0cc1caf..244f61e 100644 --- a/study/process/pid/get_pid.c +++ b/study/process/kernel_thead/kernel_thread.c @@ -30,49 +30,52 @@ int kthread_function(void *argc) return 0; } -void do_print_pid() +void print_kernel_thread_pid(void) { - pid_t res; + pid_t res = -1; + struct pid *ktpid = NULL; + struct task_struct *task = NULL; // create a kernel thread res = kernel_thread(kthread_function, NULL, CLONE_KERNEL); // get the pid of the kernel thread you create - struct pid* ktpid = find_get_pid(res); + ktpid = find_get_pid(res); // get the task info of the kernel thread - struct task_struct* task = pid_task(kpid, PIDTYPE_PID); + task = pid_task(ktpid, PIDTYPE_PID); - printk(KERN_ALERT "the state of the task is:%d\n", task->state); //鏄剧ず浠诲姟褰撳墠鎵澶勭殑鐘舵 + printk(KERN_ALERT "the state of the task is : %ld\n", task->state); //鏄剧ず浠诲姟褰撳墠鎵澶勭殑鐘舵 // get the real PID of the kernel thread - printk(KERN_ALERT "the pid of the task is:%d\n", task->pid); //鏄剧ず浠诲姟鐨勮繘绋嬪彿 + printk(KERN_ALERT "the pid of the task is :%d\n", task->pid); //鏄剧ず浠诲姟鐨勮繘绋嬪彿 // get the thread id of the kernel thread - printk(KERN_ALERT "the tgid of the task is:%d\n", task->tgid); + printk(KERN_ALERT "the tgid of the task is : %d\n", task->tgid); // 鏄剧ず鍑芥暟kernel_thread( )鍑芥暟鎵ц缁撴灉 - printk(KERN_ALERT "the kernel_thread result is:%d\n", res); + printk(KERN_ALERT "the kernel_thread result is : %d\n", res); printk(KERN_ALERT "out pid_task_init.\n"); +} + + +static int init_kernel_thread(void) +{ + print_kernel_thread_pid( ); + return 0; } - -static int init_print_pid(void) +static void exit_kernel_thread(void) { - -} - -static void exit_print_pid(void) -{ - printk(KERN_ALERT "GOOD BYE:print_pid!!\n"); + printk(KERN_ALERT "GOOD BYE:kernel_thread!!\n"); } -module_init(init_print_pidt); -module_exit(exit_print_pid); +module_init(init_kernel_thread); +module_exit(exit_kernel_thread); MODULE_AUTHOR("gatieme"); MODULE_LICENSE("GPL"); diff --git a/study/process/namespace/namespace.md b/study/process/namespace/namespace.md new file mode 100644 index 0000000..11204ed --- /dev/null +++ b/study/process/namespace/namespace.md @@ -0,0 +1,164 @@ +Linux Namespaces鏈哄埗鎻愪緵涓绉嶈祫婧愰殧绂绘柟妗堛侾ID,IPC,Network绛夌郴缁熻祫婧愪笉鍐嶆槸鍏ㄥ眬鎬х殑锛岃屾槸灞炰簬鐗瑰畾鐨凬amespace銆傛瘡涓狽amespace閲岄潰鐨勮祫婧愬鍏朵粬Namespace閮芥槸閫忔槑鐨勩傝鍒涘缓鏂扮殑Namespace锛屽彧闇瑕佸湪璋冪敤clone鏃舵寚瀹氱浉搴旂殑flag銆侺inux Namespaces鏈哄埗涓哄疄鐜板熀浜庡鍣ㄧ殑铏氭嫙鍖栨妧鏈彁渚涗簡寰堝ソ鐨勫熀纭锛孡XC锛圠inux containers锛夊氨鏄埄鐢ㄨ繖涓鐗规у疄鐜颁簡璧勬簮鐨勯殧绂汇備笉鍚孋ontainer鍐呯殑杩涚▼灞炰簬涓嶅悓鐨凬amespace锛屽郊姝ら忔槑锛屼簰涓嶅共鎵般備笅闈㈡垜浠氨浠巆lone绯荤粺璋冪敤鐨刦lag鍑哄彂锛屾潵浠嬬粛鍚勪釜Namespace銆 +鍛藉悕绌洪棿鎻愪緵浜嗚櫄鎷熷寲鐨勪竴绉嶈交閲忕骇褰㈠紡锛屼娇寰楁垜浠彲浠ヤ粠涓嶅悓鐨勬柟闈㈡潵鏌ョ湅杩愯绯荤粺鐨勫叏灞灞炴с傝鏈哄埗绫讳技浜嶴olaris涓殑zone鎴 FreeBSD涓殑jail銆傚璇ユ蹇靛仛涓鑸杩颁箣鍚庯紝鎴戝皢璁ㄨ鍛藉悕绌洪棿妗嗘灦鎵鎻愪緵鐨勫熀纭璁炬柦銆 + +#鍛藉悕绌洪棿姒傚康 +------- + +浼犵粺涓婏紝鍦↙inux浠ュ強鍏朵粬琛嶇敓鐨刄NIX鍙樹綋涓紝璁稿璧勬簮鏄叏灞绠$悊鐨勩 + +渚嬪锛岀郴缁熶腑鐨勬墍鏈夎繘绋嬫寜鐓ф儻渚嬫槸閫氳繃PID鏍囪瘑鐨勶紝杩欐剰鍛崇潃鍐呮牳蹇呴』绠$悊涓涓**鍏ㄥ眬鐨凱ID鍒楄〃**銆傝屼笖锛屾墍鏈夎皟鐢ㄨ呴氳繃uname绯荤粺璋冪敤杩斿洖鐨勭郴缁熺浉鍏充俊鎭紙鍖呮嫭绯荤粺鍚嶇О鍜屾湁鍏冲唴鏍哥殑涓浜涗俊鎭級閮芥槸鐩稿悓鐨勩傜敤鎴稩D鐨勭鐞嗘柟寮忕被浼硷紝鍗冲悇涓敤鎴锋槸閫氳繃涓涓叏灞鍞竴鐨刄ID鍙锋爣璇嗐 + +鍏ㄥ眬ID浣垮緱鍐呮牳鍙互鏈夐夋嫨鍦板厑璁告垨鎷掔粷鏌愪簺鐗规潈銆傝櫧鐒禪ID涓0鐨剅oot鐢ㄦ埛鍩烘湰涓婂厑璁稿仛浠讳綍浜嬶紝浣嗗叾浠栫敤鎴稩D鍒欎細鍙楀埌闄愬埗銆備緥濡俇ID涓簄 鐨勭敤鎴凤紝涓嶅厑璁告潃姝诲睘浜庣敤鎴穖鐨勮繘绋嬶紙m鈮 n锛夈備絾杩欎笉鑳介槻姝㈢敤鎴风湅鍒板郊姝わ紝鍗崇敤鎴穘鍙互鐪嬪埌鍙︿竴涓敤鎴穖涔熷湪璁$畻鏈轰笂娲诲姩銆傚彧瑕佺敤鎴峰彧鑳芥搷绾典粬浠嚜宸辩殑杩涚▼锛岃繖灏辨病浠涔堥棶棰橈紝鍥犱负娌℃湁鐞嗙敱涓嶅厑璁哥敤鎴风湅鍒板叾浠栫敤鎴风殑杩涚▼銆 + +浣嗘湁浜涙儏鍐典笅锛岃繖绉嶆晥鏋滃彲鑳芥槸涓嶆兂瑕佺殑銆傚鏋滄彁渚沇eb涓绘満鐨勪緵搴斿晢鎵撶畻鍚戠敤鎴锋彁渚汱inux璁$畻鏈虹殑鍏ㄩ儴璁块棶鏉冮檺锛屽寘鎷瑀oot鏉冮檺鍦ㄥ唴銆備紶缁熶笂锛岃繖闇瑕佷负姣忎釜鐢ㄦ埛鍑嗗涓鍙拌绠楁満锛屼唬浠峰お楂樸備娇鐢↘VM鎴朧MWare鎻愪緵鐨勮櫄鎷熷寲鐜鏄竴绉嶈В鍐抽棶棰樼殑鏂规硶锛屼絾璧勬簮鍒嗛厤鍋氬緱涓嶆槸闈炲父濂姐傝绠楁満鐨勫悇涓敤鎴烽兘闇瑕佷竴涓嫭绔嬬殑鍐呮牳锛屼互鍙婁竴浠藉畬鍏ㄥ畨瑁呭ソ鐨勯厤濂楃殑鐢ㄦ埛灞傚簲鐢ㄣ + +**鍛藉悕绌洪棿**鎻愪緵浜嗕竴绉嶄笉鍚岀殑瑙e喅鏂规锛屾墍闇璧勬簮杈冨皯銆傚湪铏氭嫙鍖栫殑绯荤粺涓紝涓鍙扮墿鐞嗚绠楁満鍙互杩愯澶氫釜鍐呮牳锛屽彲鑳芥槸骞惰鐨勫涓笉鍚岀殑鎿嶄綔绯荤粺銆傝屽懡鍚嶇┖闂村垯鍙娇鐢ㄤ竴涓唴鏍稿湪涓鍙扮墿鐞嗚绠楁満涓婅繍浣滐紝鍓嶈堪鐨勬墍鏈夊叏灞璧勬簮閮介氳繃鍛藉悕绌洪棿鎶借薄璧锋潵銆傝繖浣垮緱鍙互灏嗕竴缁勮繘绋嬫斁缃埌瀹瑰櫒涓紝鍚勪釜瀹瑰櫒褰兼闅旂銆傞殧绂诲彲浠ヤ娇瀹瑰櫒鐨勬垚鍛樹笌鍏朵粬瀹瑰櫒姣棤鍏崇郴銆備絾涔熷彲浠ラ氳繃鍏佽瀹瑰櫒杩涜涓瀹氱殑鍏变韩锛屾潵闄嶄綆瀹瑰櫒涔嬮棿鐨勫垎闅斻備緥濡傦紝瀹瑰櫒鍙互璁剧疆涓轰娇鐢ㄨ嚜韬殑PID闆嗗悎锛屼絾浠嶇劧涓庡叾浠栧鍣ㄥ叡浜儴鍒嗘枃浠剁郴缁熴 + +鏈川涓婏紝鍛藉悕绌洪棿寤虹珛浜嗙郴缁熺殑涓嶅悓瑙嗗浘銆傛鍓嶇殑姣忎竴椤瑰叏灞璧勬簮閮藉繀椤诲寘瑁呭埌瀹瑰櫒鏁版嵁缁撴瀯涓紝鍙湁璧勬簮鍜屽寘鍚祫婧愮殑鍛藉悕绌洪棿鏋勬垚鐨勪簩鍏冪粍浠嶇劧鏄叏灞鍞竴鐨勩傝櫧鐒跺湪缁欏畾瀹瑰櫒鍐呴儴璧勬簮鏄嚜瓒崇殑锛屼絾鏃犳硶鎻愪緵鍦ㄥ鍣ㄥ閮ㄥ叿鏈夊敮涓鎬х殑ID銆 + +鑰冭檻绯荤粺涓婃湁3涓笉鍚屽懡鍚嶇┖闂寸殑鎯呭喌銆傚懡鍚嶇┖闂村彲浠ョ粍缁囦负灞傛锛屾垜浼氬湪杩欓噷璁ㄨ杩欑鎯呭喌銆備竴涓懡鍚嶇┖闂存槸鐖跺懡鍚嶇┖闂达紝琛嶇敓浜嗕袱涓瓙鍛藉悕绌洪棿銆傚亣瀹氬鍣ㄧ敤浜庤櫄鎷熶富鏈洪厤缃腑锛屽叾涓殑姣忎釜瀹瑰櫒蹇呴』鐪嬭捣鏉ュ儚鏄崟鐙殑涓鍙癓inux璁$畻鏈恒傚洜姝ゅ叾涓瘡涓涓兘鏈夎嚜韬殑init杩涚▼锛孭ID涓0锛屽叾浠栬繘绋嬬殑PID 浠ラ掑娆″簭鍒嗛厤銆備袱涓瓙鍛藉悕绌洪棿閮芥湁PID涓0鐨刬nit杩涚▼锛屼互鍙奝ID鍒嗗埆涓2鍜3鐨勪袱涓繘绋嬨傜敱浜庣浉鍚岀殑PID鍦ㄧ郴缁熶腑鍑虹幇澶氭锛孭ID鍙蜂笉鏄叏灞鍞竴鐨勩 + + + +铏界劧瀛愬鍣ㄤ笉浜嗚В绯荤粺涓殑鍏朵粬瀹瑰櫒锛屼絾鐖跺鍣ㄧ煡閬撳瓙鍛藉悕绌洪棿鐨勫瓨鍦紝涔熷彲浠ョ湅鍒板叾涓墽琛岀殑鎵鏈夎繘绋嬨傚浘涓瓙瀹瑰櫒鐨勮繘绋嬫槧灏勫埌鐖跺鍣ㄤ腑锛孭ID涓4鍒 9銆傚敖绠$郴缁熶笂鏈9涓繘绋嬶紝浣嗗嵈闇瑕15涓狿ID鏉ヨ〃绀猴紝鍥犱负涓涓繘绋嬪彲浠ュ叧鑱斿埌澶氫釜PID銆傝嚦浜庡摢涓狿ID鏄"姝g‘"鐨勶紝鍒欎緷璧栦簬鍏蜂綋鐨勪笂涓嬫枃銆 + +濡傛灉鍛藉悕绌洪棿鍖呭惈鐨勬槸姣旇緝绠鍗曠殑閲忥紝涔熷彲浠ユ槸闈炲眰娆$殑锛屼緥濡備笅鏂囪璁虹殑UTS鍛藉悕绌洪棿銆傚湪杩欑鎯呭喌涓嬶紝鐖跺瓙鍛藉悕绌洪棿涔嬮棿娌℃湁鑱旂郴銆 +璇锋敞鎰忥紝Linux绯荤粺瀵圭畝鍗曞舰寮忕殑鍛藉悕绌洪棿鐨勬敮鎸佸凡缁忔湁寰堥暱涓娈垫椂闂翠簡锛屼富瑕佹槸chroot绯荤粺璋冪敤銆傝鏂规硶鍙互灏嗚繘绋嬮檺鍒跺埌鏂囦欢绯荤粺鐨勬煇涓閮ㄥ垎锛屽洜鑰屾槸涓绉嶇畝鍗曠殑鍛藉悕绌洪棿鏈哄埗銆備絾鐪熸鐨勫懡鍚嶇┖闂磋兘澶熸帶鍒剁殑鍔熻兘杩滆繙瓒呰繃鏂囦欢绯荤粺瑙嗗浘銆 + + +#Linux鍐呮牳鍛藉悕绌洪棿鎻忚堪 +------- + +鍦↙inux鍐呮牳涓彁渚涗簡澶氫釜namespace锛屽叾涓寘鎷琭s (mount), uts, network, sysvipc, 绛夈備竴涓繘绋嬪彲浠ュ睘浜庡涓猲amesapce,鏃㈢劧namespace鍜岃繘绋嬬浉鍏筹紝閭d箞鍦╰ask_struct缁撴瀯浣撲腑灏变細鍖呭惈鍜宯amespace鐩稿叧鑱旂殑鍙橀噺銆傚湪task_struct 缁撴瀯涓湁涓涓寚鍚憂amespace缁撴瀯浣撶殑鎸囬拡nsproxy銆 +```c +struct task_struct +{ +鈥︹.. +/* namespaces */ + struct nsproxy *nsproxy; +鈥︹. +} +``` + + +鍐嶇湅涓涓媅nsproxy](http://lxr.free-electrons.com/source/include/linux/nsproxy.h#L29)鏄浣曞畾涔夌殑锛屽湪[include/linux/nsproxy.h](http://lxr.free-electrons.com/source/include/linux/nsproxy.h)鏂囦欢涓紝杩欓噷涓鍏卞畾涔変簡5涓悇鑷殑鍛藉悕绌洪棿缁撴瀯浣擄紝鍦ㄨ缁撴瀯浣撲腑瀹氫箟浜5涓寚鍚戝悇涓被鍨媙amespace鐨勬寚閽堬紝鐢变簬澶氫釜杩涚▼鍙互浣跨敤鍚屼竴涓猲amespace锛屾墍浠sproxy鍙互鍏变韩浣跨敤锛宑ount瀛楁鏄缁撴瀯鐨勫紩鐢ㄨ鏁般 + +```c +/* 'count' is the number of tasks holding a reference. + * The count for each namespace, then, will be the number + * of nsproxies pointing to it, not the number of tasks. + * The nsproxy is shared by tasks which share all namespaces. + * As soon as a single namespace is cloned or unshared, the + * nsproxy is copied +*/ +struct nsproxy +{ + atomic_t count; + struct uts_namespace *uts_ns; + struct ipc_namespace *ipc_ns; + struct mnt_namespace *mnt_ns; + struct pid_namespace *pid_ns_for_children; + struct net *net_ns; +}; +``` +1. UTS鍛藉悕绌洪棿鍖呭惈浜嗚繍琛屽唴鏍哥殑鍚嶇О銆佺増鏈佸簳灞備綋绯荤粨鏋勭被鍨嬬瓑淇℃伅銆俇TS鏄疷NIX Timesharing System鐨勭畝绉般 + +2. 淇濆瓨鍦╯truct ipc_namespace涓殑鎵鏈変笌杩涚▼闂撮氫俊锛圛PC锛夋湁鍏崇殑淇℃伅銆 + +3. 宸茬粡瑁呰浇鐨勬枃浠剁郴缁熺殑瑙嗗浘锛屽湪struct mnt_namespace涓粰鍑恒 + +4. 鏈夊叧杩涚▼ID鐨勪俊鎭紝鐢眘truct pid_namespace鎻愪緵銆 + +5. struct net_ns鍖呭惈鎵鏈夌綉缁滅浉鍏崇殑鍛藉悕绌洪棿鍙傛暟銆 + +绯荤粺涓湁涓涓粯璁ょ殑`nsproxy`锛孾init_nsproxy](http://lxr.free-electrons.com/source/include/linux/init_task.h#L232)锛岃缁撴瀯鍦╰ask鍒濆鍖栨槸涔熶細琚垵濮嬶紝瀹氫箟鍦╗include/linux/init_task.h](http://lxr.free-electrons.com/source/include/linux/init_task.h#L190) + +```c +#define INIT_TASK(tsk) \ +{ +鈥︹.. + .nsproxy = &init_nsproxy, +鈥︹.. +} +``` + +鍏朵腑[init_nsproxy](http://lxr.free-electrons.com/source/kernel/nsproxy.c#L31)鐨勫畾涔変负锛 + +``` +struct nsproxy init_nsproxy = { + .count = ATOMIC_INIT(1), + .uts_ns = &init_uts_ns, +#if defined(CONFIG_POSIX_MQUEUE) || defined(CONFIG_SYSVIPC) + .ipc_ns = &init_ipc_ns, +#endif + .mnt_ns = NULL, + .pid_ns_for_children = &init_pid_ns, +#ifdef CONFIG_NET + .net_ns = &init_net, +#endif +}; +``` +瀵逛簬.mnt_ns娌℃湁杩涜鍒濆鍖栵紝鍏朵綑鐨刵amespace閮借繘琛屼簡绯荤粺榛樿鍒濆 + + +#鍛藉悕绌洪棿鐨勫垱寤 +------- + +鏂扮殑鍛藉悕绌洪棿鍙互鐢ㄤ笅闈袱绉嶆柟娉曞垱寤恒 + +1. 鍦ㄧ敤fork鎴朿lone绯荤粺璋冪敤鍒涘缓鏂拌繘绋嬫椂锛屾湁鐗瑰畾鐨勯夐」鍙互鎺у埗鏄笌鐖惰繘绋嬪叡浜懡鍚嶇┖闂达紝杩樻槸寤虹珛鏂扮殑鍛藉悕绌洪棿銆 + +2. unshare绯荤粺璋冪敤灏嗚繘绋嬬殑鏌愪簺閮ㄥ垎浠庣埗杩涚▼鍒嗙锛屽叾涓篃鍖呮嫭鍛藉悕绌洪棿銆傛洿澶氫俊鎭鍙傝鎵嬪唽椤祏nshare(2)銆 + +鍦ㄨ繘绋嬪凡缁忎娇鐢ㄤ笂杩扮殑涓ょ鏈哄埗涔嬩竴浠庣埗杩涚▼鍛藉悕绌洪棿鍒嗙鍚庯紝浠庤杩涚▼鐨勮搴︽潵鐪嬶紝鏀瑰彉鍏ㄥ眬灞炴т笉浼氫紶鎾埌鐖惰繘绋嬪懡鍚嶇┖闂达紝鑰岀埗杩涚▼鐨勪慨鏀逛篃涓嶄細浼犳挱鍒板瓙杩 绋嬶紝鑷冲皯瀵逛簬绠鍗曠殑閲忔槸杩欐牱銆傝屽浜庢枃浠剁郴缁熸潵璇达紝鎯呭喌灏辨瘮杈冨鏉傦紝鍏朵腑鐨勫叡浜満鍒堕潪甯稿己澶э紝甯︽潵浜嗗ぇ閲忕殑鍙兘鎬с + +鍛藉悕绌洪棿鐨勫疄鐜伴渶瑕佷袱涓儴鍒嗭細姣忎釜瀛愮郴缁熺殑鍛藉悕绌洪棿缁撴瀯锛屽皢姝ゅ墠鎵鏈夌殑鍏ㄥ眬缁勪欢鍖呰鍒板懡鍚嶇┖闂翠腑锛涘皢缁欏畾杩涚▼鍏宠仈鍒版墍灞炲悇涓懡鍚嶇┖闂寸殑鏈哄埗銆 + +鍦ㄧ敤fork鎴朿lone绯荤粺璋冪敤鍒涘缓鏂拌繘绋嬫椂锛屾湁鐗瑰畾鐨勯夐」鍙互鎺у埗鏄笌鐖惰繘绋嬪叡浜懡鍚嶇┖闂达紝杩樻槸寤虹珛鏂扮殑鍛藉悕绌洪棿銆傝繖浜涢夐」濡備笅 + +* CLONE_NEWPID 杩涚▼鍛藉悕绌洪棿銆傜┖闂村唴鐨凱ID 鏄嫭绔嬪垎閰嶇殑锛屾剰鎬濆氨鏄懡鍚嶇┖闂村唴鐨勮櫄鎷 PID 鍙兘浼氫笌鍛藉悕绌洪棿澶栫殑 PID 鐩稿啿绐侊紝浜庢槸鍛藉悕绌洪棿鍐呯殑 PID 鏄犲皠鍒板懡鍚嶇┖闂村鏃朵細浣跨敤鍙﹀涓涓 PID銆傛瘮濡傝锛屽懡鍚嶇┖闂村唴绗竴涓 PID 涓1锛岃屽湪鍛藉悕绌洪棿澶栧氨鏄 PID 宸茶 init 杩涚▼鎵浣跨敤銆 + +* CLONE_NEWIPC 杩涚▼闂撮氫俊(IPC)鐨勫懡鍚嶇┖闂达紝鍙互灏 SystemV 鐨 IPC 鍜 POSIX 鐨勬秷鎭槦鍒楃嫭绔嬪嚭鏉ャ + +* CLONE_NEWNET 缃戠粶鍛藉悕绌洪棿锛岀敤浜庨殧绂荤綉缁滆祫婧愶紙/proc/net銆両P 鍦板潃銆佺綉鍗°佽矾鐢辩瓑锛夈傚悗鍙拌繘绋嬪彲浠ヨ繍琛屽湪涓嶅悓鍛藉悕绌洪棿鍐呯殑鐩稿悓绔彛涓婏紝鐢ㄦ埛杩樺彲浠ヨ櫄鎷熷嚭涓鍧楃綉鍗° + +* CLONE_NEWNS 鎸傝浇鍛藉悕绌洪棿锛岃繘绋嬭繍琛屾椂鍙互灏嗘寕杞界偣涓庣郴缁熷垎绂伙紝浣跨敤杩欎釜鍔熻兘鏃讹紝鎴戜滑鍙互杈惧埌 chroot 鐨勫姛鑳斤紝鑰屽湪瀹夊叏鎬ф柟闈㈡瘮 chroot 鏇撮珮銆 + +* CLONE_NEWUTS UTS 鍛藉悕绌洪棿锛屼富瑕佺洰鐨勬槸鐙珛鍑轰富鏈哄悕鍜岀綉缁滀俊鎭湇鍔★紙NIS锛夈 + +* CLONE_NEWUSER 鐢ㄦ埛鍛藉悕绌洪棿锛屽悓杩涚▼ ID 涓鏍凤紝鐢ㄦ埛 ID 鍜岀粍 ID 鍦ㄥ懡鍚嶇┖闂村唴澶栨槸涓嶄竴鏍风殑锛屽苟涓斿湪涓嶅悓鍛藉悕绌洪棿鍐呭彲浠ュ瓨鍦ㄧ浉鍚岀殑 ID銆 + + +##PID Namespace +------- + +褰撹皟鐢╟lone鏃讹紝璁惧畾浜咰LONE_NEWPID锛屽氨浼氬垱寤轰竴涓柊鐨凱ID Namespace锛宑lone鍑烘潵鐨勬柊杩涚▼灏嗘垚涓篘amespace閲岀殑绗竴涓繘绋嬨備竴涓狿ID Namespace涓鸿繘绋嬫彁渚涗簡涓涓嫭绔嬬殑PID鐜锛孭ID Namespace鍐呯殑PID灏嗕粠1寮濮嬶紝鍦∟amespace鍐呰皟鐢╢ork锛寁fork鎴朿lone閮藉皢浜х敓涓涓湪璇amespace鍐呯嫭绔嬬殑PID銆傛柊鍒涘缓鐨凬amespace閲岀殑绗竴涓繘绋嬪湪璇amespace鍐呯殑PID灏嗕负1锛屽氨鍍忎竴涓嫭绔嬬殑绯荤粺閲岀殑init杩涚▼涓鏍枫傝Namespace鍐呯殑瀛ゅ効杩涚▼閮藉皢浠ヨ杩涚▼涓虹埗杩涚▼锛屽綋璇ヨ繘绋嬭缁撴潫鏃讹紝璇amespace鍐呮墍鏈夌殑杩涚▼閮戒細琚粨鏉熴侾ID Namespace鏄眰娆℃э紝鏂板垱寤虹殑Namespace灏嗕細鏄垱寤鸿Namespace鐨勮繘绋嬪睘浜庣殑Namespace鐨勫瓙Namespace銆傚瓙Namespace涓殑杩涚▼瀵逛簬鐖禢amespace鏄彲瑙佺殑锛屼竴涓繘绋嬪皢鎷ユ湁涓嶆涓涓狿ID锛岃屾槸鍦ㄦ墍鍦ㄧ殑Namespace浠ュ強鎵鏈夌洿绯荤鍏圢amespace涓兘灏嗘湁涓涓狿ID銆傜郴缁熷惎鍔ㄦ椂锛屽唴鏍稿皢鍒涘缓涓涓粯璁ょ殑PID Namespace锛岃Namespace鏄墍鏈変互鍚庡垱寤虹殑Namespace鐨勭鍏堬紝鍥犳绯荤粺鎵鏈夌殑杩涚▼鍦ㄨNamespace閮芥槸鍙鐨勩 + +##IPC Namespace +------- + +褰撹皟鐢╟lone鏃讹紝璁惧畾浜咰LONE_NEWIPC锛屽氨浼氬垱寤轰竴涓柊鐨処PC Namespace锛宑lone鍑烘潵鐨勮繘绋嬪皢鎴愪负Namespace閲岀殑绗竴涓繘绋嬨備竴涓狪PC Namespace鏈変竴缁凷ystem V IPC objects 鏍囪瘑绗︽瀯鎴愶紝杩欐爣璇嗙鏈塈PC鐩稿叧鐨勭郴缁熻皟鐢ㄥ垱寤恒傚湪涓涓狪PC Namespace閲岄潰鍒涘缓鐨処PC object瀵硅Namespace鍐呯殑鎵鏈夎繘绋嬪彲瑙侊紝浣嗘槸瀵瑰叾浠朜amespace涓嶅彲瑙侊紝杩欐牱灏变娇寰椾笉鍚孨amespace涔嬮棿鐨勮繘绋嬩笉鑳界洿鎺ラ氫俊锛屽氨鍍忔槸鍦ㄤ笉鍚岀殑绯荤粺閲屼竴鏍枫傚綋涓涓狪PC Namespace琚攢姣侊紝璇amespace鍐呯殑鎵鏈塈PC object浼氳鍐呮牳鑷姩閿姣併 +PID Namespace鍜孖PC Namespace鍙互缁勫悎璧锋潵涓璧蜂娇鐢紝鍙渶鍦ㄨ皟鐢╟lone鏃讹紝鍚屾椂鎸囧畾CLONE_NEWPID鍜孋LONE_NEWIPC锛岃繖鏍锋柊鍒涘缓鐨凬amespace鏃㈡槸涓涓嫭绔嬬殑PID绌洪棿鍙堟槸涓涓嫭绔嬬殑IPC绌洪棿銆備笉鍚孨amespace鐨勮繘绋嬪郊姝や笉鍙锛屼篃涓嶈兘浜掔浉閫氫俊锛岃繖鏍峰氨瀹炵幇浜嗚繘绋嬮棿鐨勯殧绂汇 + +##mount Namespace +------- + +褰撹皟鐢╟lone鏃讹紝璁惧畾浜咰LONE_NEWNS锛屽氨浼氬垱寤轰竴涓柊鐨刴ount Namespace銆傛瘡涓繘绋嬮兘瀛樺湪浜庝竴涓猰ount Namespace閲岄潰锛宮ount Namespace涓鸿繘绋嬫彁渚涗簡涓涓枃浠跺眰娆¤鍥俱傚鏋滀笉璁惧畾杩欎釜flag锛屽瓙杩涚▼鍜岀埗杩涚▼灏嗗叡浜竴涓猰ount Namespace锛屽叾鍚庡瓙杩涚▼璋冪敤mount鎴杣mount灏嗕細褰卞搷鍒版墍鏈夎Namespace鍐呯殑杩涚▼銆傚鏋滃瓙杩涚▼鍦ㄤ竴涓嫭绔嬬殑mount Namespace閲岄潰锛屽氨鍙互璋冪敤mount鎴杣mount寤虹珛涓浠芥柊鐨勬枃浠跺眰娆¤鍥俱傝flag閰嶅悎pivot_root绯荤粺璋冪敤锛屽彲浠ヤ负杩涚▼鍒涘缓涓涓嫭绔嬬殑鐩綍绌洪棿銆 + +##Network Namespace +------- + +褰撹皟鐢╟lone鏃讹紝璁惧畾浜咰LONE_NEWNET锛屽氨浼氬垱寤轰竴涓柊鐨凬etwork Namespace銆備竴涓狽etwork Namespace涓鸿繘绋嬫彁渚涗簡涓涓畬鍏ㄧ嫭绔嬬殑缃戠粶鍗忚鏍堢殑瑙嗗浘銆傚寘鎷綉缁滆澶囨帴鍙o紝IPv4鍜孖Pv6鍗忚鏍堬紝IP璺敱琛紝闃茬伀澧欒鍒欙紝sockets绛夌瓑銆備竴涓狽etwork Namespace鎻愪緵浜嗕竴浠界嫭绔嬬殑缃戠粶鐜锛屽氨璺熶竴涓嫭绔嬬殑绯荤粺涓鏍枫備竴涓墿鐞嗚澶囧彧鑳藉瓨鍦ㄤ簬涓涓狽etwork Namespace涓紝鍙互浠庝竴涓狽amespace绉诲姩鍙︿竴涓狽amespace涓傝櫄鎷熺綉缁滆澶(virtual network device)鎻愪緵浜嗕竴绉嶇被浼肩閬撶殑鎶借薄锛屽彲浠ュ湪涓嶅悓鐨凬amespace涔嬮棿寤虹珛闅ч亾銆傚埄鐢ㄨ櫄鎷熷寲缃戠粶璁惧锛屽彲浠ュ缓绔嬪埌鍏朵粬Namespace涓殑鐗╃悊璁惧鐨勬ˉ鎺ャ傚綋涓涓狽etwork Namespace琚攢姣佹椂锛岀墿鐞嗚澶囦細琚嚜鍔ㄧЩ鍥瀒nit Network Namespace锛屽嵆绯荤粺鏈寮濮嬬殑Namespace銆 + +##UTS Namespace +------- + +褰撹皟鐢╟lone鏃讹紝璁惧畾浜咰LONE_NEWUTS锛屽氨浼氬垱寤轰竴涓柊鐨刄TS Namespace銆備竴涓猆TS Namespace灏辨槸涓缁勮uname杩斿洖鐨勬爣璇嗙銆傛柊鐨刄TS Namespace涓殑鏍囪瘑绗﹂氳繃澶嶅埗璋冪敤杩涚▼鎵灞炵殑Namespace鐨勬爣璇嗙鏉ュ垵濮嬪寲銆侰lone鍑烘潵鐨勮繘绋嬪彲浠ラ氳繃鐩稿叧绯荤粺璋冪敤鏀瑰彉杩欎簺鏍囪瘑绗︼紝姣斿璋冪敤sethostname鏉ユ敼鍙樿Namespace鐨刪ostname銆傝繖涓鏀瑰彉瀵硅Namespace鍐呯殑鎵鏈夎繘绋嬪彲瑙併侰LONE_NEWUTS鍜孋LONE_NEWNET涓璧蜂娇鐢紝鍙互铏氭嫙鍑轰竴涓湁鐙珛涓绘満鍚嶅拰缃戠粶绌洪棿鐨勭幆澧冿紝灏辫窡缃戠粶涓婁竴鍙扮嫭绔嬬殑涓绘満涓鏍枫 +浠ヤ笂鎵鏈塩lone flag閮藉彲浠ヤ竴璧蜂娇鐢紝涓鸿繘绋嬫彁渚涗簡涓涓嫭绔嬬殑杩愯鐜銆侺XC姝f槸閫氳繃clone鏃惰瀹氳繖浜沠lag锛屼负杩涚▼鍒涘缓涓涓湁鐙珛PID锛孖PC锛孎S锛孨etwork锛孶TS绌洪棿鐨刢ontainer銆備竴涓猚ontainer灏辨槸涓涓櫄鎷熺殑杩愯鐜锛屽container閲岀殑杩涚▼鏄忔槑鐨勶紝瀹冧細浠ヤ负鑷繁鏄洿鎺ュ湪涓涓郴缁熶笂杩愯鐨勩備竴涓猚ontainer灏卞儚浼犵粺铏氭嫙鍖栨妧鏈噷闈㈢殑涓鍙板畨瑁呬簡OS鐨勮櫄鎷熸満锛屼絾鏄紑閿鏇村皬锛岄儴缃叉洿涓轰究鎹枫 +Linux Namespaces鏈哄埗鏈韩灏辨槸涓轰簡瀹炵幇 container based virtualizaiton寮鍙戠殑銆傚畠鎻愪緵浜嗕竴濂楄交閲忕骇銆侀珮鏁堢巼鐨勭郴缁熻祫婧愰殧绂绘柟妗堬紝杩滄瘮浼犵粺鐨勮櫄鎷熷寲鎶鏈紑閿灏忥紝涓嶈繃瀹冧篃涓嶆槸瀹岀編鐨勶紝瀹冧负鍐呮牳鐨勫紑鍙戝甫鏉ヤ簡鏇村鐨勫鏉傛э紝瀹冨湪闅旂鎬у拰瀹归敊鎬т笂璺熶紶缁熺殑铏氭嫙鍖栨妧鏈瘮涔熻繕鏈夊樊璺濄 + +##[user_namespace](http://lxr.free-electrons.com/source/include/linux/user_namespace.h#L25) +------- + +CLONE_NEWUSER鎸囧畾瀛愯繘绋嬫嫢鏈夋柊鐨勭敤鎴风┖闂 + diff --git a/study/process/pid/.get_pid.o.d b/study/process/pid/.get_pid.o.d deleted file mode 100644 index f1308da..0000000 --- a/study/process/pid/.get_pid.o.d +++ /dev/null @@ -1,178 +0,0 @@ -get_pid.o: \ - /home/gatieme/Work/GitHub/LDD-LinuxDeviceDrivers/study/process/pid/get_pid.c \ - /usr/src/kernels/2.6.32-573.26.1.el6.x86_64/include/linux/kconfig.h \ - include/linux/autoconf.h include/linux/init.h include/linux/compiler.h \ - include/linux/compiler-gcc.h include/linux/compiler-gcc4.h \ - include/linux/module.h include/linux/list.h include/linux/types.h \ - /usr/src/kernels/2.6.32-573.26.1.el6.x86_64/arch/x86/include/asm/types.h \ - include/asm-generic/types.h include/asm-generic/int-ll64.h \ - /usr/src/kernels/2.6.32-573.26.1.el6.x86_64/arch/x86/include/asm/bitsperlong.h \ - include/asm-generic/bitsperlong.h include/linux/posix_types.h \ - include/linux/stddef.h \ - /usr/src/kernels/2.6.32-573.26.1.el6.x86_64/arch/x86/include/asm/posix_types.h \ - /usr/src/kernels/2.6.32-573.26.1.el6.x86_64/arch/x86/include/asm/posix_types_64.h \ - include/linux/poison.h include/linux/prefetch.h \ - /usr/src/kernels/2.6.32-573.26.1.el6.x86_64/arch/x86/include/asm/processor.h \ - /usr/src/kernels/2.6.32-573.26.1.el6.x86_64/arch/x86/include/asm/processor-flags.h \ - /usr/src/kernels/2.6.32-573.26.1.el6.x86_64/arch/x86/include/asm/vm86.h \ - /usr/src/kernels/2.6.32-573.26.1.el6.x86_64/arch/x86/include/asm/ptrace.h \ - /usr/src/kernels/2.6.32-573.26.1.el6.x86_64/arch/x86/include/asm/ptrace-abi.h \ - /usr/src/kernels/2.6.32-573.26.1.el6.x86_64/arch/x86/include/asm/segment.h \ - /usr/src/kernels/2.6.32-573.26.1.el6.x86_64/arch/x86/include/asm/cache.h \ - include/linux/linkage.h \ - /usr/src/kernels/2.6.32-573.26.1.el6.x86_64/arch/x86/include/asm/linkage.h \ - include/linux/stringify.h \ - /usr/src/kernels/2.6.32-573.26.1.el6.x86_64/arch/x86/include/asm/page_types.h \ - include/linux/const.h \ - /usr/src/kernels/2.6.32-573.26.1.el6.x86_64/arch/x86/include/asm/page_64_types.h \ - /usr/src/kernels/2.6.32-573.26.1.el6.x86_64/arch/x86/include/asm/math_emu.h \ - /usr/src/kernels/2.6.32-573.26.1.el6.x86_64/arch/x86/include/asm/sigcontext.h \ - /usr/src/kernels/2.6.32-573.26.1.el6.x86_64/arch/x86/include/asm/current.h \ - /usr/src/kernels/2.6.32-573.26.1.el6.x86_64/arch/x86/include/asm/percpu.h \ - include/linux/kernel.h \ - /usr/lib/gcc/x86_64-redhat-linux/4.4.7/include/stdarg.h \ - include/linux/bitops.h \ - /usr/src/kernels/2.6.32-573.26.1.el6.x86_64/arch/x86/include/asm/bitops.h \ - /usr/src/kernels/2.6.32-573.26.1.el6.x86_64/arch/x86/include/asm/alternative.h \ - /usr/src/kernels/2.6.32-573.26.1.el6.x86_64/arch/x86/include/asm/asm.h \ - /usr/src/kernels/2.6.32-573.26.1.el6.x86_64/arch/x86/include/asm/cpufeature.h \ - /usr/src/kernels/2.6.32-573.26.1.el6.x86_64/arch/x86/include/asm/required-features.h \ - include/asm-generic/bitops/sched.h include/asm-generic/bitops/hweight.h \ - include/asm-generic/bitops/fls64.h \ - include/asm-generic/bitops/ext2-non-atomic.h \ - include/asm-generic/bitops/le.h \ - /usr/src/kernels/2.6.32-573.26.1.el6.x86_64/arch/x86/include/asm/byteorder.h \ - include/linux/byteorder/little_endian.h include/linux/swab.h \ - /usr/src/kernels/2.6.32-573.26.1.el6.x86_64/arch/x86/include/asm/swab.h \ - include/linux/byteorder/generic.h include/asm-generic/bitops/minix.h \ - include/linux/log2.h include/linux/typecheck.h include/linux/ratelimit.h \ - include/linux/param.h \ - /usr/src/kernels/2.6.32-573.26.1.el6.x86_64/arch/x86/include/asm/param.h \ - include/asm-generic/param.h include/linux/dynamic_debug.h \ - /usr/src/kernels/2.6.32-573.26.1.el6.x86_64/arch/x86/include/asm/bug.h \ - include/asm-generic/bug.h include/asm-generic/percpu.h \ - include/linux/threads.h include/linux/percpu-defs.h \ - /usr/src/kernels/2.6.32-573.26.1.el6.x86_64/arch/x86/include/asm/system.h \ - /usr/src/kernels/2.6.32-573.26.1.el6.x86_64/arch/x86/include/asm/cmpxchg.h \ - /usr/src/kernels/2.6.32-573.26.1.el6.x86_64/arch/x86/include/asm/cmpxchg_64.h \ - /usr/src/kernels/2.6.32-573.26.1.el6.x86_64/arch/x86/include/asm/nops.h \ - include/linux/irqflags.h \ - /usr/src/kernels/2.6.32-573.26.1.el6.x86_64/arch/x86/include/asm/irqflags.h \ - /usr/src/kernels/2.6.32-573.26.1.el6.x86_64/arch/x86/include/asm/paravirt.h \ - /usr/src/kernels/2.6.32-573.26.1.el6.x86_64/arch/x86/include/asm/pgtable_types.h \ - /usr/src/kernels/2.6.32-573.26.1.el6.x86_64/arch/x86/include/asm/pgtable_64_types.h \ - /usr/src/kernels/2.6.32-573.26.1.el6.x86_64/arch/x86/include/asm/paravirt_types.h \ - /usr/src/kernels/2.6.32-573.26.1.el6.x86_64/arch/x86/include/asm/desc_defs.h \ - /usr/src/kernels/2.6.32-573.26.1.el6.x86_64/arch/x86/include/asm/kmap_types.h \ - include/asm-generic/kmap_types.h include/linux/cpumask.h \ - include/linux/bitmap.h include/linux/string.h \ - /usr/src/kernels/2.6.32-573.26.1.el6.x86_64/arch/x86/include/asm/string.h \ - /usr/src/kernels/2.6.32-573.26.1.el6.x86_64/arch/x86/include/asm/string_64.h \ - /usr/src/kernels/2.6.32-573.26.1.el6.x86_64/arch/x86/include/asm/page.h \ - /usr/src/kernels/2.6.32-573.26.1.el6.x86_64/arch/x86/include/asm/page_64.h \ - include/asm-generic/memory_model.h include/asm-generic/getorder.h \ - /usr/src/kernels/2.6.32-573.26.1.el6.x86_64/arch/x86/include/asm/msr.h \ - /usr/src/kernels/2.6.32-573.26.1.el6.x86_64/arch/x86/include/asm/msr-index.h \ - include/linux/ioctl.h \ - /usr/src/kernels/2.6.32-573.26.1.el6.x86_64/arch/x86/include/asm/ioctl.h \ - include/asm-generic/ioctl.h \ - /usr/src/kernels/2.6.32-573.26.1.el6.x86_64/arch/x86/include/asm/errno.h \ - include/asm-generic/errno.h include/asm-generic/errno-base.h \ - /usr/src/kernels/2.6.32-573.26.1.el6.x86_64/arch/x86/include/asm/cpumask.h \ - include/linux/personality.h include/linux/cache.h include/linux/math64.h \ - /usr/src/kernels/2.6.32-573.26.1.el6.x86_64/arch/x86/include/asm/div64.h \ - include/asm-generic/div64.h include/linux/err.h include/linux/stat.h \ - /usr/src/kernels/2.6.32-573.26.1.el6.x86_64/arch/x86/include/asm/stat.h \ - include/linux/time.h include/linux/seqlock.h include/linux/spinlock.h \ - include/linux/preempt.h include/linux/thread_info.h \ - /usr/src/kernels/2.6.32-573.26.1.el6.x86_64/arch/x86/include/asm/thread_info.h \ - /usr/src/kernels/2.6.32-573.26.1.el6.x86_64/arch/x86/include/asm/ftrace.h \ - /usr/src/kernels/2.6.32-573.26.1.el6.x86_64/arch/x86/include/asm/atomic.h \ - /usr/src/kernels/2.6.32-573.26.1.el6.x86_64/arch/x86/include/asm/atomic_64.h \ - include/asm-generic/atomic-long.h include/linux/bottom_half.h \ - include/linux/spinlock_types.h \ - /usr/src/kernels/2.6.32-573.26.1.el6.x86_64/arch/x86/include/asm/spinlock_types.h \ - include/linux/lockdep.h \ - /usr/src/kernels/2.6.32-573.26.1.el6.x86_64/arch/x86/include/asm/spinlock.h \ - /usr/src/kernels/2.6.32-573.26.1.el6.x86_64/arch/x86/include/asm/rwlock.h \ - include/linux/spinlock_api_smp.h include/linux/kmod.h \ - include/linux/gfp.h include/linux/mmzone.h include/linux/wait.h \ - include/linux/numa.h include/linux/nodemask.h \ - include/linux/pageblock-flags.h include/linux/bounds.h \ - include/linux/memory_hotplug.h include/linux/notifier.h \ - include/linux/errno.h include/linux/mutex.h include/linux/rwsem.h \ - /usr/src/kernels/2.6.32-573.26.1.el6.x86_64/arch/x86/include/asm/rwsem.h \ - include/linux/srcu.h \ - /usr/src/kernels/2.6.32-573.26.1.el6.x86_64/arch/x86/include/asm/mmzone.h \ - /usr/src/kernels/2.6.32-573.26.1.el6.x86_64/arch/x86/include/asm/mmzone_64.h \ - include/linux/mmdebug.h \ - /usr/src/kernels/2.6.32-573.26.1.el6.x86_64/arch/x86/include/asm/smp.h \ - /usr/src/kernels/2.6.32-573.26.1.el6.x86_64/arch/x86/include/asm/mpspec.h \ - /usr/src/kernels/2.6.32-573.26.1.el6.x86_64/arch/x86/include/asm/mpspec_def.h \ - /usr/src/kernels/2.6.32-573.26.1.el6.x86_64/arch/x86/include/asm/x86_init.h \ - /usr/src/kernels/2.6.32-573.26.1.el6.x86_64/arch/x86/include/asm/bootparam.h \ - include/linux/screen_info.h include/linux/apm_bios.h include/linux/edd.h \ - /usr/src/kernels/2.6.32-573.26.1.el6.x86_64/arch/x86/include/asm/e820.h \ - include/linux/ioport.h \ - /usr/src/kernels/2.6.32-573.26.1.el6.x86_64/arch/x86/include/asm/ist.h \ - include/video/edid.h \ - /usr/src/kernels/2.6.32-573.26.1.el6.x86_64/arch/x86/include/asm/apic.h \ - include/linux/delay.h \ - /usr/src/kernels/2.6.32-573.26.1.el6.x86_64/arch/x86/include/asm/delay.h \ - include/linux/pm.h include/linux/workqueue.h include/linux/timer.h \ - include/linux/ktime.h include/linux/jiffies.h include/linux/timex.h \ - /usr/src/kernels/2.6.32-573.26.1.el6.x86_64/arch/x86/include/asm/timex.h \ - /usr/src/kernels/2.6.32-573.26.1.el6.x86_64/arch/x86/include/asm/tsc.h \ - include/linux/debugobjects.h include/linux/completion.h \ - /usr/src/kernels/2.6.32-573.26.1.el6.x86_64/arch/x86/include/asm/apicdef.h \ - /usr/src/kernels/2.6.32-573.26.1.el6.x86_64/arch/x86/include/asm/fixmap.h \ - /usr/src/kernels/2.6.32-573.26.1.el6.x86_64/arch/x86/include/asm/acpi.h \ - include/acpi/pdc_intel.h \ - /usr/src/kernels/2.6.32-573.26.1.el6.x86_64/arch/x86/include/asm/numa.h \ - /usr/src/kernels/2.6.32-573.26.1.el6.x86_64/arch/x86/include/asm/numa_64.h \ - /usr/src/kernels/2.6.32-573.26.1.el6.x86_64/arch/x86/include/asm/mmu.h \ - /usr/src/kernels/2.6.32-573.26.1.el6.x86_64/arch/x86/include/asm/vsyscall.h \ - /usr/src/kernels/2.6.32-573.26.1.el6.x86_64/arch/x86/include/asm/idle.h \ - /usr/src/kernels/2.6.32-573.26.1.el6.x86_64/arch/x86/include/asm/io_apic.h \ - /usr/src/kernels/2.6.32-573.26.1.el6.x86_64/arch/x86/include/asm/irq_vectors.h \ - /usr/src/kernels/2.6.32-573.26.1.el6.x86_64/arch/x86/include/asm/sparsemem.h \ - include/linux/topology.h include/linux/smp.h \ - /usr/src/kernels/2.6.32-573.26.1.el6.x86_64/arch/x86/include/asm/topology.h \ - include/asm-generic/topology.h include/linux/sysctl.h \ - include/linux/elf.h include/linux/elf-em.h \ - /usr/src/kernels/2.6.32-573.26.1.el6.x86_64/arch/x86/include/asm/elf.h \ - /usr/src/kernels/2.6.32-573.26.1.el6.x86_64/arch/x86/include/asm/user.h \ - /usr/src/kernels/2.6.32-573.26.1.el6.x86_64/arch/x86/include/asm/user_64.h \ - /usr/src/kernels/2.6.32-573.26.1.el6.x86_64/arch/x86/include/asm/auxvec.h \ - /usr/src/kernels/2.6.32-573.26.1.el6.x86_64/arch/x86/include/asm/vdso.h \ - include/linux/kobject.h include/linux/sysfs.h include/linux/kref.h \ - include/linux/moduleparam.h include/linux/tracepoint.h \ - include/linux/rcupdate.h include/linux/rcutree.h \ - /usr/src/kernels/2.6.32-573.26.1.el6.x86_64/arch/x86/include/asm/local.h \ - include/linux/percpu.h include/linux/slab.h include/linux/slab_def.h \ - include/linux/kmalloc_sizes.h include/linux/pfn.h \ - /usr/src/kernels/2.6.32-573.26.1.el6.x86_64/arch/x86/include/asm/module.h \ - include/asm-generic/module.h include/trace/events/module.h \ - include/trace/define_trace.h include/linux/sched.h \ - include/linux/capability.h include/linux/rbtree.h \ - include/linux/mm_types.h include/linux/auxvec.h \ - include/linux/prio_tree.h include/linux/page-debug-flags.h \ - /usr/src/kernels/2.6.32-573.26.1.el6.x86_64/arch/x86/include/asm/cputime.h \ - include/asm-generic/cputime.h include/linux/sem.h include/linux/ipc.h \ - /usr/src/kernels/2.6.32-573.26.1.el6.x86_64/arch/x86/include/asm/ipcbuf.h \ - include/asm-generic/ipcbuf.h \ - /usr/src/kernels/2.6.32-573.26.1.el6.x86_64/arch/x86/include/asm/sembuf.h \ - include/linux/signal.h \ - /usr/src/kernels/2.6.32-573.26.1.el6.x86_64/arch/x86/include/asm/signal.h \ - include/asm-generic/signal-defs.h \ - /usr/src/kernels/2.6.32-573.26.1.el6.x86_64/arch/x86/include/asm/siginfo.h \ - include/asm-generic/siginfo.h include/linux/path.h include/linux/pid.h \ - include/linux/proportions.h include/linux/percpu_counter.h \ - include/linux/seccomp.h include/linux/rculist.h include/linux/rtmutex.h \ - include/linux/plist.h include/linux/resource.h \ - /usr/src/kernels/2.6.32-573.26.1.el6.x86_64/arch/x86/include/asm/resource.h \ - include/asm-generic/resource.h include/linux/hrtimer.h \ - include/linux/task_io_accounting.h include/linux/latencytop.h \ - include/linux/cred.h include/linux/key.h include/linux/selinux.h \ - include/linux/percpu-rwsem.h include/linux/atomic.h include/linux/aio.h \ - include/linux/aio_abi.h include/linux/uio.h diff --git a/study/process/pid/PID命名空间.png b/study/process/pid/PID命名空间.png new file mode 100644 index 0000000000000000000000000000000000000000..228b3b6406b2de6aa23ae91fb14e3dbbe1330c3a GIT binary patch literal 16740 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 +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鍛藉悕绌洪棿 + +![鍛藉悕绌洪棿鐨勫眰娆″叧绯诲浘](./鍛藉悕绌洪棿鐨勫眰娆″叧绯诲浘.jpg) + + + + +>鍦ㄤ笂鍥炬湁鍥涗釜鍛藉悕绌洪棿锛屼竴涓埗鍛藉悕绌洪棿琛嶇敓浜嗕袱涓瓙鍛藉悕绌洪棿锛屽叾涓殑涓涓瓙鍛藉悕绌洪棿鍙堣鐢熶簡涓涓瓙鍛藉悕绌洪棿銆備互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 | 鎸囧悜鐖跺懡鍚嶇┖闂寸殑鎸囬拡 | + +![PID鍛藉悕绌洪棿.png](./PID鍛藉悕绌洪棿.png) + + +瀹為檯涓奝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涓嬭繘绋嬪懡鍚嶇┖闂村拰杩涚▼鐨勫叧绯荤粨鏋勫涓嬶細 + +![杩涚▼鍛藉悕绌洪棿鍜岃繘绋嬬殑鍏崇郴缁撴瀯](./杩涚▼鍛藉悕绌洪棿鍜岃繘绋嬬殑鍏崇郴缁撴瀯.png) +鍙互鐪嬪埌锛屽涓猼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鍙枫 + +缁撴瀯绀烘剰鍥惧鍥 + +![涓涓猼ask_struct瀵瑰簲涓涓狿ID](./涓涓猼ask_struct瀵瑰簲涓涓狿ID.png) + + +#濡備綍蹇熷湴鏍规嵁灞閮↖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鍛藉悕绌洪棿涔嬪悗鐨勭粨鏋勫浘.png) + + +鍥句腑鍏充簬濡傛灉鍒嗛厤鍞竴鐨 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 new file mode 100644 index 0000000000000000000000000000000000000000..f89248b4dcc8ba102d434579c7d42138a71553d9 GIT binary patch literal 55374 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 literal 0 HcmV?d00001 diff --git a/study/process/pid/命名空间的层次关系图.jpg b/study/process/pid/命名空间的层次关系图.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1060cf0d2a27693b225b38223933afe4d8a9ac92 GIT binary patch literal 36566 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 WQ&ZqY8)&9|PG07zbpAs<@BatTsk+Ai literal 0 HcmV?d00001 diff --git a/study/process/pid/增加PID命名空间之后的结构图.png b/study/process/pid/增加PID命名空间之后的结构图.png new file mode 100644 index 0000000000000000000000000000000000000000..09f71dafc98bba364f1f160d165a9ec0de4c2dfa GIT binary patch literal 64592 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