2011-04-08 73 views
6

我可能正在接近這個錯誤的方向,所以任何幫助,將不勝感激。在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,這意味着fork是未實現的。我無法升級到1.9,因爲我需要首先解決內部和外部團隊依賴問題(而且這種問題不會很快完成)。

我已經試過

  • 通過「開始」 命令運行的進程,但是這仍然塊
  • 可執行線程 上調用Thread.kill但它仍然需要可執行 被殺害

那麼,這是我可以在Ruby中做的事情,我只是缺少一些東西或者我有一個問題,因爲我不能使用叉?

在此先感謝

+0

如果'system(「啓動executable_to_run.exe」)'塊,一些東西搞砸了。 「開始」的一點是它開始一個新的獨立過程。 – cHao 2011-04-08 10:21:21

+0

Ruby 1.8.7不支持Windows上的本機線程,因爲Windows選擇不正確實現POSIX線程。你知道這一點。做這個工作的唯一方法是說服Windows在'system'調用中啓動一個獨立的進程。你需要一個Windows而不是Ruby人來回答這個問題。 – 2011-04-08 17:14:00

回答

3

我只是想和start不能在Windows 7 X64的使用Ruby 1.8.7阻止。

system 'start notepad' 
puts 'Exiting now...' 

這顯然是Windows特有的。

+1

特定的可執行文件。例如,在命令提示符下運行記事本不保留在該過程中。記事本啓動,但命令提示符變爲空閒的更多命令。 但是,運行我想要在命令提示符下運行的可執行文件會保留該進程。 – 2011-04-08 10:32:11

+0

@Lee Winder - 是否有另一個可執行文件演示了我們可以用來測試這種行爲?因爲到目前爲止,我嘗試過的所有東西都可以使用'start program'。 – 2011-04-08 21:03:33

4

detunized的答案應該在windows上工作。這是一個跨平臺的系統:

pid = spawn 'some_executable' 
Process.detach(pid) #tell the OS we're not interested in the exit status 
+1

我的印象是產卵是1.9+而不是1.8.7?我當然使用'spawn'得到一個未定義的方法錯誤。 – 2011-04-08 11:16:59

+1

是的,你是對的,它是1.9。我沒有意識到這一點。 – steenslag 2011-04-08 11:26:03