0
puts "Process #{Process.pid} started"
return_value = fork
puts "Process #{Process.pid} returned #{return_value}"
puts "Process #{Process.pid} exited"

上記のルビーコードは、この出力をSTDOUTに出力しました

Process 6644 started
Process 6644 returned 6645
Process 6644 exited
Process 6645 returned 
Process 6645 exited

親プロセスが実行forkされると、子プロセスのpidが返されます。子プロセスが呼び出したときに、forkなぜそれが返さnilれるのですか、これは再帰的な種類の呼び出しではありませんか?のように..子も別の子プロセスをフォークします..そしてその子プロセスは別のプロセスをフォークします..など、私はここで何かが欠けていますか?

4

2 に答える 2

1

これは、コードが親プロセスで実行されているか子プロセスで実行されているかをコードで区別する方法です。親プロセスはフォークされた子のPIDを受け取り、子はを取得しnilます。

個人的には、次の構文を使用することを好みます。

pid = fork do
  # this is the code that will be executed by the child
end

# this is the code executed by parent

ほとんどの場合、子は親プロセス以外のことを行うことになっているため、このコードは意図をはるかによく反映しています。

于 2012-06-22T13:37:19.943 に答える
0

私はあなたがポイントを逃していると思います私はあなたがブロックでフォークを呼び出すRubyフォークのドキュメントを参照して、その下のコードを親と子(フォークプロセス)のために2回実行しました

あなたがあなたの出力を検査する場合

Process 6644 started  -- Parent Process Started
Process 6644 returned 6645 -- Parent Process displaying the retrun value = child process id
Process 6644 exited   -- Parent Process exiting
Process 6645 returned  -- Child Process forked earlier and since there return value is nil
Process 6645 exited  -- Child Process exiting

フォークに関するRubyのドキュメントを確認してください。この形式のフォーク宣言は、@psyhoが回答したブロックのことから一見混乱しています。

紛らわしいので、@psychoが答えたのと同じ宣言に従うことをお勧めします

この助けを願っています

于 2012-06-22T18:28:49.533 に答える