如果我使用fork()系统调用来创建子进程,那么我使用#ps aux命令来查看进程的大小,我总是看到子进程比父进程多4 KB! 我还想知道如何知道RAM中任何进程的实际地址,而不是/ proc / pid / maps中显示的相对位置 提前致谢
pid = fork();
if( pid == 0)
{
getchar();
execlp("/usr/bin/top", NULL);
}
else
{
wait(&childstatus);
printf("Hello From Parent\n");
}
当子进程正在等待getchar()时运行#ps aux。
答案 0 :(得分:0)
内核采用写时复制方法,同时将内存从父进程地址空间复制到子进程地址空间。
另一件事是内核会在fork
上的进程表中添加大约2kB(在32位系统上)描述符。
我也想知道如何知道RAM中任何进程的实际地址,而不是/ proc / pid / maps中显示的相对
嗯,这需要某种内核调试器。据我记得,有一些kdb or kgdb。
答案 1 :(得分:0)
我刚刚意识到这4 KB额外是因为wait()。如果我将其删除,父进程和子进程的大小将相同。 但是有人能告诉我为什么wait()会消耗更多的4 KB额外费用吗?