잘못된 방향으로 접근 할 수 있으므로 도움이 될 것입니다.Ruby에서 독립적 인 스레드 또는 프로세스를 스폰합니다.
저는 Ruby 스크립트를 가지고 있는데, 다른 것들 중에서 실행 파일을 시작합니다. 이 실행 파일을 시작하고 싶습니다. 현재 시스템 ""을 사용하여 실행 중입니다. 그런 다음 스크립트를 계속 진행하십시오. 스크립트가 끝나면 스크립트를 종료하고 실행 파일을 실행 상태로두기를 원합니다.
원래 나는 다음과 같은
# Do some work
# Start the executable
system("executable_to_run.exe")
# Continue working
했다 그러나 차단 실행 및 시스템 "은"executable_to_run.exe입니다 종료하지 않습니다 실행 파일이
(나는 그것에을 원하지 않는) 실행이 완료 될 때까지그래서 나는 지금이 스레드가 일의 실행 파일을 실행되는 동안 내 스크립트를 계속 실행할 수 있다는 점에서 잘 작동
# Do some work
# Start the executable on it's one thread
Thread.new do
system("executable_to_run.exe")
end
# Continue working
이 같은 (대폭 삭감)가 e 배경. 불행히도, 내 스크립트가 종료 될 때 실행 가능한 스레드가 계속 실행 중이며 스레드가 종료 될 때까지 종료되지 않습니다. 실행 파일을 죽이면 스레드가 종료되고 스크립트가 종료됩니다.
그래서 "executable_to_run.exe"를 트리거하고 백그라운드에서 실행되도록 설정하면됩니다.
저는 Windows에서 Ruby 1.8.7을 사용하고 있습니다. 즉, 포크가 구현되지 않았습니다. 내가 먼저 해결해야하는 내부 및 외부 팀 종속성이 있으므로 (그리고 언제든지 완료되지는 않을 것입니다.) 1.9로 업그레이드 할 수 없습니다.
내가- '시작' 명령을 통해 프로세스를 실행을 시도했습니다
하지만 여전히 블록
실행 스레드 에 Thread.kill를 호출
- 하지만 여전히 이 살해되는 실행 파일을 필요로
그래서 Ruby에서 할 수있는 일이 무엇인가요? 나는 뭔가를 놓치고 있거나 포크를 사용할 수 없기 때문에 문제가 있습니까?
미리 감사
'시작'의 요점 중 하나는 새로운 독립 프로세스를 시작한다는 것입니다. – cHao
Windows가 POSIX 스레드를 올바르게 구현하지 않기 때문에 Ruby 1.8.7은 Windows에서 기본 스레드를 지원하지 않습니다. 너는 이것을 알고 있었다. 이 작업을 수행하는 유일한 방법은 Windows가'system' 호출 내에서 독립적 인 프로세스를 시작하도록 설득하는 것입니다. 이 문제를 해결하려면 Ruby가 아닌 Windows가 필요합니다. –