freeBSD unix中的fork
fork系统调用是否为子进程分配新的用户结构?它是否为子进程分配新的进程结构。freeBSD unix中的fork,unix,process,freebsd,Unix,Process,Freebsd,fork系统调用是否为子进程分配新的用户结构?它是否为子进程分配新的进程结构。 但是为什么子进程中的lseek会影响父进程呢?每个进程打开的文件中的当前指针等信息不都是在用户结构中维护的吗?这两者都是不同的?谢谢。手册页确切地说,孩子只得到描述符的一个新副本(小整数值)。这些描述符通常是包含文件信息的内核表的数组索引(“相同的底层对象”)。如果孩子想要一个独立的文件指针,他必须通过再次打开文件来创建这样一个对象。 DESCRIPTION The fork() system call
但是为什么子进程中的lseek会影响父进程呢?每个进程打开的文件中的当前指针等信息不都是在用户结构中维护的吗?这两者都是不同的?谢谢。手册页确切地说,孩子只得到描述符的一个新副本(小整数值)。这些描述符通常是包含文件信息的内核表的数组索引(“相同的底层对象”)。如果孩子想要一个独立的文件指针,他必须通过再次打开文件来创建这样一个对象。
DESCRIPTION
The fork() system call causes creation of a new process. The new process
(child process) is an exact copy of the calling process (parent process)
except for the following:
+o The child process has a unique process ID.
+o The child process has a different parent process ID (i.e., the
process ID of the parent process).
+o The child process has its own copy of the parent's descriptors.
These descriptors reference the same underlying objects, so
that, for instance, file pointers in file objects are shared
between the child and the parent, so that an lseek(2) on a
descriptor in the child process can affect a subsequent read(2)
or write(2) by the parent. This descriptor copying is also
used by the shell to establish standard input and output for
newly created processes as well as to set up pipes.
+o The child process' resource utilizations are set to 0; see
setrlimit(2).
+o All interval timers are cleared; see setitimer(2).