2009-04-19 11 views
0

forkシステムコールは、子プロセスの新しいユーザー構造を割り当てますか?子プロセスの新しいプロセス構造を割り当てます。freeBSD unixのfork

答えて

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

なぜ子プロセスの効果親process.Does'ntでのlseekは、各プロセスによって開かれたファイルの現在のポインタなどの情報があるユーザ構造に維持されます両方のために異なる? ありがとう – mawia

+0

いいえ。マニュアルページには、子がディスクリプタ(新しい整数値)の新しいコピーを取得するということだけが記載されています。これらの記述子は、通常、ファイル情報を持つカーネルテーブルへの配列インデックスです(「同じ基礎オブジェクト」)。子供が独立したファイルポインタを必要とする場合、そのファイルを再び開くことによって、そのようなオブジェクト自体を作成する必要があります。 – Jens