2017-05-18 2 views
0

Ruby 2.3.3 (Win32)에서 성공한 응용 프로그램을 종료하고 싶습니다. 그 스크립트에서 프로그램을 종료하려고하면 segfault가 생깁니다.세그 폴트없이 rb_load_protect를 통해로드 된 스크립트에서 exit를 호출하는 방법

# script.rb 
loop do 
    # do something 
    exit 0 if foo() 
    break if bar() 
end 

foobar 그냥 Qtrue 또는 Qfalse 반환됩니다

나는 다음 시도했다.

나는 함께 스크립트를로드

ruby_init(); 

int ruby_state = 0; 
VALUE script = rb_str_new_cstr("./script.rb"); 
rb_load_protect(script, 0, &ruby_state); 

ruby_cleanup(ruby_state); 

그리고 세그먼트 폴트를 생성합니다. 또한 ruby_cleanup을 Ruby에서 호출 된 함수에 넣으려고했지만 동일한 segfault를 생성합니다.

Ruby VM을 중지 시키거나 적어도 현재 스크립트를 중지 할 수 있습니까?

+0

'exit!'시도해보세요. 콜백을 무시합니다. –

+0

감사합니다. – Sisyphe

+0

그런 다음 해결 된 것으로 표시하십시오. 나는 대답을 추가했다. :-) –

답변

1

시도 exit!. 콜백을 무시합니다.