Ruby Tips!

RubyのTipsを紹介します

子プロセスを生成して外部コマンドを実行する

子プロセスを生成して外部コマンドを実行するにはforkexecを使用する。

forkシステムコールを使ってプロセスの複製を作り、ブロックを指定して呼び出した場合は生成した子プロセスでブロックを評価する。execは現在のプロセスを与えられた外部コマンドで置き換える。

プロセスの終了を待ってプロセスIDと終了ステータスコードを得るにはwaitpid2を使用する。waitpid2は特定の子プロセスの終了を待ち、プロセスが終了したらPIDと終了ステータスコードの配列を返す。

以下は子プロセスで3秒間のスリープを実行して、その終了を待つ例である。

pid = fork do
  exec('sleep 3')
end

exitpid, status = *Process.waitpid2(pid)