2017-01-15 1 views
1

오두막 스크립트 :strace를 나는 간단한 루비 스크립트 파일이

#!/usr/bin/env ruby 

puts "Hello World" 

나는이 사용 strace를 실행하면 :

$ strace -s 100 -f ./script2 

를 내가받을 성공적인 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

shebang 행에 지정된 인터프리터는 execve 호출 내에서 커널 자체에 의해 실행됩니다. 인수가 아닌 루비 인터프리터로 스크립트의 이름으로 하나

는이 스크립트를 strace의 경우, 하나의 execve 전화를 볼 수있는 간단한

#!/usr/bin/ruby 

puts "Hello World" 

과 스크립트를 비교.

자세한 내용은 load_scriptkernel function을보십시오.

+0

그게 내가 고맙다고 생각한 것입니다. –