форк в unix для FreeBSD

Выделяет ли системный вызов fork новую структуру пользователя для дочернего процесса? Он выделяет новую структуру процесса для дочернего процесса.


person mawia    schedule 19.04.2009    source источник


Ответы (1)


http://svn.freebsd.org/base/release/7.1.0/sys/kern/kern_fork.c

http://www.freebsd.org/cgi/man.cgi?query=fork&apropos=0&sektion=0&manpath=FreeBSD+7.1-RELEASE&format=html

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).
person Joe Koberg    schedule 19.04.2009
comment
но почему lseek в дочернем процессе влияет на родительский процесс. Разве такая информация, как текущий указатель в файле, открытом каждым процессом, не сохраняется в пользовательской структуре, которая отличается для обоих? Благодарность - person mawia; 19.04.2009
comment
Нет. На странице руководства точно сказано, что дочерний элемент получает только новую копию дескрипторов (небольшие целые значения). Эти дескрипторы обычно представляют собой индексы массива в таблице ядра с информацией о файлах (те же базовые объекты). Если ребенку нужен независимый указатель файла, он должен сам создать такой объект, снова открыв файл. - person Jens; 10.04.2011