[问题] proc/[pid]/maps 与 exe 的问题

楼主: cklonger (22)   2017-11-10 03:42:43
在看 /proc/[pid]/maps时
有些process maps第一行pathname是空的
文件 http://man7.org/linux/man-pages/man5/proc.5.html
表示是mmap设定成 MAP_ANONYMOUS
请问什么时候会这样用
/proc/[pid]/exe是 execution binaries的link
文件说可以被dereferenced
请问什么样的程式会dereferenced 或是连结失败
例如fork subprocess?
作者: galic (嘎利)   2017-11-10 09:55:00
当你需要一块连续的内存空间 而且是0填满的(zero-filled)有些library alloc()系列函式底层实作就是用MAP_ANONYMOUS另外 dereferenced 你可能误会意思了他跟C的 "*" dereference operator 的概念类似symbolic link看作是pointer 所以这里的意思是当你去读exe不是读到exe这个symbolic link 而是exe refer的对象也就是那个可执行的binary档但我记得procfs在/exe的实作上不是真的symbolic link但结果有87%像就是了... 就跟你不用MAP_ANONYMOUS 但是fd指向/dev/zero 也是有87%像
楼主: cklonger (22)   2017-11-10 18:10:00
请问fork的子程序 exe会是 空的吗
作者: galic (嘎利)   2017-11-10 20:33:00
这问题好难... exe其实是印mm_struct的exe_fileexe会空的情况就是没有mm(memory descriptor)而没有mm的 通常都是kernel thread 因为kernel thread都run在同一个kernel address space中,所以不需要mm说“通常” 是因为还有一种情况是mm已经被release什么情况mm会被release但是process还活着?? ->zombie所以我猜答案是kernel thread和zombie process都没有exe再把fork加进来 kernel thread fork出去的task 也都没有mm如果是一般有mm的task, fork()我记得会dup mm, 所以exe会跟parent一样,直到exec()的时候才会去改mm里面的exe_file但是child如果变成zombie 又会变成没有exe讲太复杂了 你的答案是:“有可能”
楼主: cklonger (22)   2017-11-10 20:49:00
非常感谢再请问zombie 有办法 被wake up吗
作者: galic (嘎利)   2017-11-10 20:58:00
不行 zombie的memory已经被release 所以才叫zombie

Links booklink

Contact Us: admin [ a t ] ucptt.com