exec(command, options={}) -> ()[permalink][rdoc][edit]exec(env, command, options={}) -> ()-
引数で指定されたコマンドを実行します。
プロセスの実行コードはそのコマンド(あるいは shell)になるので、起動に成功した場合、このメソッドからは戻りません。
引数の解釈
この形式では command が shell のメタ文字
* ? {} [] <> () ~ & | \ $ ; ' ` " \nを含む場合、shell 経由で実行されます。そうでなければインタプリタから直接実行されます。
- [PARAM]
command: - コマンドを文字列で指定します。
- [PARAM]
env: - 更新する環境変数を表す Hash
- [PARAM]
options: - オプションパラメータ Hash
- [EXCEPTION]
Errno::EXXX: - 起動に失敗し、ruby インタプリタに制御が戻った場合に発生します。
# a.rb puts '実行前' exec 'echo "実行中"' puts '実行後'上記のスクリプトを実行すると以下のようになります。
$ ruby a.rb 実行前 実行中 # '実行後' は表示されない - [PARAM]
exec(program, *args, options={}) -> ()[permalink][rdoc][edit]exec(env, program, *args, options={}) -> ()-
引数で指定されたコマンドを実行します。
プロセスの実行コードはそのコマンド(あるいは shell)になるので、起動に成功した場合、このメソッドからは戻りません。
この形式では、常に shell を経由せずに実行されます。
exec(3) でコマンドを実行すると、元々のプログラムの環境をある程度(ファイルデスクリプタなど)引き継ぎます。 Hash を options として渡すことで、この挙動を変更できます。詳しくは Kernel?.spawn を参照してください。
引数の解釈
この形式で呼び出した場合、空白や shell のメタキャラクタもそのまま program の引数に渡されます。先頭の引数が2要素の配列であった場合、第1要素の文字列が実際に起動するプログラムのパスであり、第2要素が「みせかけ」のプログラム名になります。また、第1要素はフルパスで指定しなくても環境変数 PATH から探します。
- [PARAM]
program: - 文字列か2要素の配列を指定します。
- [PARAM]
args: - 渡される引数です。0 個以上の文字列を指定します。
- [PARAM]
env: - 更新する環境変数を表す Hash
- [PARAM]
options: - オプションパラメータ Hash
- [EXCEPTION]
ArgumentError: - 第一引数が配列かつ要素数が 2 でない場合に発生します。
- [EXCEPTION]
Errno::EXXX: - 起動に失敗し、ruby インタプリタに制御が戻った場合に発生します。
# a.rb exec ['sleep', 'mysleep'], '600'上記スクリプトを実行すると以下のようになります。
$ ruby a.rb ## sleep してるので制御が戻ってこない。別の仮想端末に切替えて以下を実行 $ ps aux|grep sleep xxxx 32754 0.0 0.0 2580 468 pts/3 S+ 22:01 0:00 mysleep 600 xxxx 32761 0.0 0.0 2824 792 pts/6 S+ 22:01 0:00 grep sleep[SEE_ALSO] Kernel?.system,Kernel?.`,Kernel?.spawn,Kernel?.fork,IO.popen,IO.pipe,Kernel?.open,exec(3)
- [PARAM]