- 论坛徽章:
- 0
|
1 进程ID 0是调度进程,常常被称为交换进程(swapper)。该进程并不执行任何磁盘上的程序,它是内核的一部分,因此也被称为系统进程。进程ID 1通常是init进程,在自举过程结束时由内核调用。该进程的程序文件在unix的早期版本中是/etc/init,在较新版本中是/sbin/init。此进程负责在内核自举后起动一个unix系统。init通常读与系统有关的初始化文件( /etc/rc*文件),并将系统引导到一个状态(例如多用户)。init进程决不会终止。它是一个普通的用户进程(与交换进程不同,它不是内核中的系统进程),但是它以超级用户特权运行。在某些unix的虚存实现中,进程ID 2是页精灵进程(pagedaemon )。此进程负责支持虚存系统的请页操作。与交换进程一样,页精灵进程也是内核进程。
2 子进程是父进程的复制品。子进程获得父进程数据空间、堆和栈的复制品。注意,这是子进程所拥有的拷贝。父、子进程并不共享这些存储空间部分。如果正文段是只读的,则父、子进程共享正文段。现在很多的实现并不做一个父进程数据段和堆的完全拷贝,因为在fork之后经常跟随着exec。作为替代,使用了在写时复制( Copy - On - Write, COW)的技术。这些区域由父、子进程共享,而且内核将它们的存取许可权改变为只读的。如果有进程试图修改这些区域,则内核为有关部分,典型的是虚存系统中的“页”,做一个拷贝。
3 strlen计算不包含终止null字节的字符串长度,而sizeof则计算包括终止符在内的缓冲区长度。前者要通过调用函数来实现,后者由于缓冲区已用字符串进行了初始化,其长度是固定的,所以在编译时就已得知缓冲区长度。
4 标准输出缓冲区是由换行符进行冲洗的,所以在遇到\n时会自动将存放在缓冲区的字符串给输出到标准输出设备中去。
5 vfork与fork的作用不一样,前者是创建子进程后保证子进程先运行,在其退出之前一直是在父进程的地址空间里运行,所以它会改变父进程中的变量值。但是后者不能改变父进程的变量值,因为二者是在不同的地址空间里工作的。
6 _exit不同于exit,前者是在退出时不会冲洗所有标准I/O流,而后者则会。
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u1/45292/showart_359113.html |
|