2009-04-19 6 views
0

Gibt der fork-Systemaufruf eine neue Benutzerstruktur für den untergeordneten Prozess an, da er eine neue Prozessstruktur für den untergeordneten Prozess zuweist.fork in freeBSD unix

Antwort

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). 
+0

aber warum ein lseek in untergeordneten Prozess Effekt Elternteil die Informationen, wie aktuelle Zeiger in der durch jeden Prozess geöffnete Datei process.Does'nt wird in der Benutzerstruktur gehalten wird, die ist anders für beide? danke – mawia

+0

Nein. Die man-Seite sagt genau, dass das Kind nur eine neue Kopie der Deskriptoren (kleine ganzzahlige Werte) bekommt. Diese Deskriptoren sind normalerweise Array-Indizes in einer Kernel-Tabelle mit Dateiinformationen ("gleiche zugrunde liegende Objekte"). Wenn ein Kind einen unabhängigen Dateizeiger wünscht, muss es selbst ein solches Objekt erstellen, indem es die Datei erneut öffnet. – Jens