子进程比父进程大4 kb?

时间:2015-11-04 15:59:19

标签: fork

如果我使用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。

2 个答案:

答案 0 :(得分:0)

内核采用写时复制方法,同时将内存从父进程地址空间复制到子进程地址空间。

另一件事是内核会在fork上的进程表中添加大约2kB(在32位系统上)描述符。

  

我也想知道如何知道RAM中任何进程的实际地址,而不是/ proc / pid / maps中显示的相对

嗯,这需要某种内核调试器。据我记得,有一些kdb or kgdb

答案 1 :(得分:0)

我刚刚意识到这4 KB额外是因为wait()。如果我将其删除,父进程和子进程的大小将相同。 但是有人能告诉我为什么wait()会消耗更多的4 KB额外费用吗?