作者cklonger (22)
看板LinuxDev
标题[问题] proc/[pid]/maps 与 exe 的问题
时间Fri Nov 10 03:42:43 2017
在看 /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?
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 133.34.143.187
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/LinuxDev/M.1510256568.A.142.html
1F:→ galic: 当你需要一块连续的记忆体空间 而且是0填满的(zero-filled) 11/10 09:55
2F:→ galic: 有些library alloc()系列函式底层实作就是用MAP_ANONYMOUS 11/10 09:56
3F:→ galic: 另外 dereferenced 你可能误会意思了 11/10 09:56
4F:→ galic: 他跟C的 "*" dereference operator 的概念类似 11/10 09:57
5F:→ galic: symbolic link看作是pointer 所以这里的意思是当你去读exe 11/10 09:57
6F:→ galic: 不是读到exe这个symbolic link 而是exe refer的对象 11/10 09:58
7F:→ galic: 也就是那个可执行的binary档 11/10 09:58
8F:推 galic: 但我记得procfs在/exe的实作上不是真的symbolic link 11/10 10:02
9F:→ galic: 但结果有87%像就是了... 就跟你不用MAP_ANONYMOUS 但是fd指 11/10 10:02
10F:→ galic: 向/dev/zero 也是有87%像 11/10 10:03
11F:→ cklonger: 请问fork的子程序 exe会是 空的吗 11/10 18:10
12F:推 galic: 这问题好难... exe其实是印mm_struct的exe_file 11/10 20:33
13F:→ galic: exe会空的情况就是没有mm(memory descriptor) 11/10 20:33
14F:→ galic: 而没有mm的 通常都是kernel thread 因为kernel thread都run 11/10 20:34
15F:→ galic: 在同一个kernel address space中,所以不需要mm 11/10 20:35
16F:→ galic: 说「通常」 是因为还有一种情况是mm已经被release 11/10 20:35
17F:→ galic: 什麽情况mm会被release但是process还活着?? ->zombie 11/10 20:36
18F:→ galic: 所以我猜答案是kernel thread和zombie process都没有exe 11/10 20:36
19F:→ galic: 再把fork加进来 kernel thread fork出去的task 也都没有mm 11/10 20:37
20F:→ galic: 如果是一般有mm的task, fork()我记得会dup mm, 所以exe会跟 11/10 20:39
21F:→ galic: parent一样,直到exec()的时候才会去改mm里面的exe_file 11/10 20:39
22F:→ galic: 但是child如果变成zombie 又会变成没有exe 11/10 20:40
23F:→ galic: 讲太复杂了 你的答案是:「有可能」 11/10 20:44
24F:→ cklonger: 非常感谢 11/10 20:49
25F:→ cklonger: 再请问zombie 有办法 被wake up吗 11/10 20:52
26F:→ galic: 不行 zombie的memory已经被release 所以才叫zombie 11/10 20:58