0

次のルビーシェルがあります。

#!/usr/bin/env ruby

$stdin.each_line do |line|
  pid = fork{
    exec line
    puts "after exec -> #{Process.pid}"
  }
  Process.wait pid
end

後のputsメソッドexecは実行されません。に基づいて、指定された外部を実行して現在のプロセスを置き換えるri Kernel.execようです。execしたがって、フォークされた新しいプロセスを外部プロセスに置き換えることになっています。execコマンドの後に何かを実行するにはどうすればよいですか?

4

1 に答える 1

3

それはいけません。

のドキュメントによるとKernel#exec、「[it] は、指定された外部コマンドを実行して現在のプロセスを置き換えます」。これは、コードを実行するのではなく、コマンドで指定したコードを実行することを意味します。

システムコールを「ラップ」したい場合は、Kernel#system(またはバッククォート演算子)を使用してサブシェルでコマンドを実行する必要があります。

于 2013-09-25T18:40:58.747 に答える