fork
が呼び出されるたびに、1つの追加プロセスが作成されます。
最初にfork
を呼び出すと、親プロセスPがサブプロセスSP1を作成します。 フォーク後、親プロセスはサブプロセスSP2を作成してfork
(をスキップ)を再度呼び出します。
SP1 fork
をif
にコールした後、サブサブプロセスSSP1を作成します。 SP1はスレッドを生成します。 SP1はif
のままです。 fork
を再度呼び出して、サブサブプロセスSSP2を作成します。
SSP1がスレッドを生成します。 SSP1はif
を残し、fork
を呼び出し、サブサブサブプロセスSSSPを作成します。
したがって、プロセスが作成されました:SP1、SP2、SSP1、SSP2、SSSP = 5プロセス。 元のプロセスPを数えた場合、6つのプロセスがあります。
SP1とSSP1だけがスレッドを生成するため、2つのスレッドが作成されます。すべてのプロセスのメインスレッドをすべてカウントすると、元のプロセス数をカウントするかどうかによって、スレッド数は7または8になります。
作成されたプロセスとスレッドがコードに関連付けられています。
P
pid t pid; |
pid = fork(); +------SP1
if (pid == 0) { | |
fork(); | +---------------SSP1
thread create(...); | |-SP1's thread |-SSP1's thread
} | | |
fork(); +-SP2 +-SSP2 +-SSSP
| | | | | |
出典
2013-03-09 00:11:11
jxh
ループはありません。それは "if"です。 – QuentinUK
なぜ8つのプロセス? 'fork'コールの1つはifテストにあります。 – didierc