UNIX系统编程:进程与终端I/O详解
1. 进程相关函数
在UNIX系统中,进程管理是非常重要的一部分,涉及到多个关键函数。
1.1 vfork函数
大多数实现虚拟内存的UNIX版本都提供了vfork函数。与fork不同,vfork创建子进程时不会复制调用进程的整个地址空间,子进程会直接使用父进程的地址空间、内存和控制线程。
vfork的主要目的是在通过exec执行另一个程序时,提供一种更高效的创建子进程的方法。因为调用exec无论如何都会覆盖调用进程的地址空间,所以先复制所有内容意义不大。但需要注意的是,如果使用vfork创建的进程没有立即调用exec,可能会导致严重问题。
在较新版本的UNIX中,vfork的需求有所减少,因为fork通常实现了写时复制(copy-on-write)机制,即只有当子进程尝试修改地址空间时,才会复制父进程的地址空间。由于vfork是非标准的,不建议在新程序中使用,但在移植旧软件时可能会偶尔出现。另外,vfork函数在IRIX 5.x中不可用。
1.2 输入输出重定向
UNIX shell的一个非常有用的特性是能够重定向输入和输出。例如,ls &