fork()函数 UNIX编程中fork()的使用是怎样的原理?
UNIX编程中fork()的使用是怎样的原理?
首先解释一下:在UNIX/Linux中,父进程调用fork生成子进程,父进程打开的文件描述符会被复制到子进程中,子进程通过父进程复制的文件描述符与父进程共享打开文件的文件条目。为什么要分享?考虑到实际问题,在类UNIX操作系统中生成新进程的唯一方法是fork调用。大多数fork调用只有两个目的:1)一个进程创建自己的副本来实现多进程模型,需要共享打开的文件描述符来进行同步。2) Fork是一个子进程,它调用exec函数来执行新进程。考虑在命令行中执行程序的方法。所有程序都是shell fork并调用exec的子进程。因此,可以直接使用stdin、stdout、stderr等环境变量。
为了解决您的问题:“fork之后,我们将调用exec来执行另一个程序。此时,我们将用一个新程序替换子进程的主体、数据、堆和堆栈。在这种情况下,子进程的文件描述符表所占用的内存将自动释放。为什么我们还有是否关闭子进程的文件描述符?”文件描述符由内核维护,并在任何情况下通过引用计数技术由内核释放。因此,exec不会影响内核中的文件表条目,因此不会影响进程打开的文件描述符表。Only fork只是将父进程打开的文件描述符复制到子进程,然后父子进程共享文件表条目。
最后,您可以设置Exec位上文件的关闭,以在执行Exec时关闭文件描述符。
fork()函数 fork函数的作用 gcc编译过程的四个阶段
版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。