16

test.sh という名前のシェル スクリプトがあります。Ruby から test.sh をトリガーするにはどうすればよいですか?

test.sh をバックグラウンド プロセスとして実行したいのですが、これは Ruby では非同期呼び出しであることを意味します。

STDERR と STDOUT も特定のファイルに書き込む必要があります。

何か案は?

4

3 に答える 3

35

@ TanzeebKhalili の回答は機能しますが、プロセスが戻るのを待たないKernel.spawn()を検討することもできます。

pid = spawn("./test.sh")
Process.detach(pid)

ドキュメントによると、spawn()または手動でfork()andを使用するかどうかにかかわらず、終了する前にsystem()PID を取得する必要があることに注意してください。Process.detach()Process.wait()

標準エラーと出力のリダイレクトに関しては、次の方法で簡単spawn()です。

pid = spawn("./test.sh", :out => "test.out", :err => "test.err")
Process.detach(pid)
于 2012-08-16T08:47:31.627 に答える
13

これを試して:

Process.fork { system "./test.sh" }

スレッドを使用できる Windows では機能しません。

于 2012-08-16T07:43:44.340 に答える