Process#spawn
返回進程ID。如果你得到一個進程ID,那麼從技術上來說,函數本身並沒有失敗。在Ruby> = 2.0.0中,如果Process#spawn
未能找到該命令,它將拋出Errno::ENOENT
。由於ruby 1.9不受支持,最好的解決方案是升級ruby。
可能會有幫助的黑客將測試過程是否在呼叫返回後實際運行。可悲的是,這將是特定於平臺的。
pid = Process.spawn("xxx")
case RUBY_PLATFORM
when /linux/i
success = File.exist?("/proc/#{pid}")
when /windows/i
# use win32api gem, Windows API call EnumProcesses
else
# ?
end
不幸的是,如果過程在您測試其存在的時間結束時,您不能說。你可能想檢查它的結果(無論它做什麼),看看它是否也做到了。
另一種方法,如果你控制着程序的啓動,就是在啓動之前打開一個命名管道,讓它發送一個消息到你正在運行的管道上。您可以在spawn
以非阻塞方式呼叫之後從管道中讀取數據,並使用Timeout
來防止永久阻塞。一個更簡單,不太乾淨的方法是讓該程序爲文件寫一些確定性的內容,然後使用簡單的File.exist?
測試來查看它是否存在。
來源
2017-10-29 09:02:00
Tom
這很有幫助。謝謝。 – cschol