2017-01-15 18 views
1

シェバングスクリプト:straceの私は、単純なRubyスクリプトファイルを持っている

#!/usr/bin/env ruby 

puts "Hello World" 

私は、この使用straceの実行時:

$ strace -s 100 -f ./script2 

をI取得に成功execve呼び出しの次のシーケンス:

execve("./script2", ["./script2"], [/* 85 vars */]) = 0 
execve("/home/omar/.rvm/rubies/ruby-2.3.1/bin/ruby", ["ruby", "./script2"], [/* 85 vars */]) = 0 

これらは私が存在することを期待していましたが、出力にはを実行する行がありませんコマンド。なぜこれはそうですか? envコマンドは内部でexecveシステムコールによって呼び出されますか?私は、rubyインタプリタバイナリが実行されて終了するイベントのシーケンスを知りたい。

答えて

2

シバン行で指定されたインタプリタは、execve呼び出しの中でカーネル自体によって実行されます。引数としてスクリプト名を持つ1、ないRubyインタプリタ:

は、このスクリプトをstraceの場合は、あなただけの1 execveコールが表示されます簡単な

#!/usr/bin/ruby 

puts "Hello World" 

でスクリプトを比較してください。

詳しくはload_scriptkernel functionをご覧ください。

+0

これは私が探していたものです。ありがとうございました。 –

関連する問題