aidy
1
Hi,
I have fired off an exe with the kernal method exec
loader_app = “#{Dir.getwd}/PublishUi.exe”
exec(loader_app)
The exec method seems to hold up the process
so
exec(loader_app)
puts “we got here”
Will not print “we got here” till I close the app.
I am not sure whether I should use a new thread or a new process here,
or whether there is an alternative.
Thanks
Aidy
aidy
2
On Feb 24, 2009, at 8:19 AM, aidy [email protected] wrote:
Aidy
IO.popen(an_exe)
aidy
3
On Tue, Feb 24, 2009 at 6:59 PM, List.rb [email protected] wrote:
IO.popen(an_exe)
And with ruby 1.9, Kernel.spawn:
http://ruby-doc.org/core-1.9/classes/Kernel.html#M006071
Cheers,
lasitha.
aidy
4
aidy wrote:
Hi,
I have fired off an exe with the kernal method exec
loader_app = “#{Dir.getwd}/PublishUi.exe”
exec(loader_app)
Since you appear to be on windows, you can’t fork, but you can do this:
Thread.new do
loader_app = “#{Dir.getwd}/PublishUi.exe”
system(loader_app)
end
continue with other stuff here
This is a fairly cross-platform way to handle it. Of course on windows,
you can also do
system “start …”
and then you don’t even need a ruby thread.
aidy
5
aidy wrote:
Aid
exec doesn’t hold up the process, it replaces it completely[1]. Your
second example will never print “we got here”.
Assuming you do not need to communicate with, wait on, or know anything
about the process you are starting, you can use fork[2] and exec this
way:
fork { exec load_app }
-Justin
[1] module Kernel - RDoc Documentation
[2] module Kernel - RDoc Documentation
aidy
6
I like this pattern:
def fire_and_forget(&block)
pid = fork do
begin
yield
ensure
Process.exit!
end
end
Process.detach pid
end
A little bit safer then just using ‘fork’…
Taken from a post here:
http://www.caboo.se/articles/2006/10/14/premcache-caching-an
d-precaching-with-memcached
Justin C. wrote:
Assuming you do not need to communicate with, wait on, or know anything
about the process you are starting, you can use fork[2] and exec this
way:
fork { exec load_app }
-Justin
[1] module Kernel - RDoc Documentation
[2] module Kernel - RDoc Documentation