From: Park Heesob Date: 2006-11-11T09:19:04+09:00 Subject: Re: win32/process question Hi, >From: J-Van >Reply-To: ruby-talk@ruby-lang.org >To: ruby-talk@ruby-lang.org (ruby-talk ML) >Subject: Re: win32/process question >Date: Sat, 11 Nov 2006 03:24:34 +0900 > >On 11/10/06, Park Heesob wrote: >> >>Hi, >> .... >> > >>Refer to http://msdn2.microsoft.com/fr-fr/library/ms686722.aspx, >>"While open handles to kernel objets are closed automatically when a >>process >>terminates, the objects themselves exist until all open handles to them >>are >>closed. Therefore, an object will remain valid after a process that is >>using >>it terminates if another process has an open handle to it." >> >>Here is the working code. >> >>irb(main):001:0> require 'win32/process' >>=> true >>irb(main):002:0> include Windows::Handle >>=> Object >>irb(main):003:0> info = Process.create :app_name=>'notepad' >>=> #>process >>_id=1748, thread_id=1108> >>irb(main):004:0> Process.kill 0,info.process_id >>=> [1748] >>irb(main):005:0> Process.kill 9,info.process_id >>=> [1748] >>irb(main):006:0> CloseHandle(info.process_handle) >>=> true >>irb(main):007:0> CloseHandle(info.thread_handle) >>=> true >>irb(main):008:0> Process.kill 0,info.process_id >>ProcessError: The parameter is incorrect. >> from >>c:/ruby/lib/ruby/gems/1.8/gems/win32-process-0.5.1/lib/win32/proces >>s.rb:156:in `kill' >> from >>c:/ruby/lib/ruby/gems/1.8/gems/win32-process-0.5.1/lib/win32/proces >>s.rb:132:in `each' >> from >>c:/ruby/lib/ruby/gems/1.8/gems/win32-process-0.5.1/lib/win32/proces >>s.rb:132:in `kill' >> from (irb):8 > >So, if I use Process.create to create a new process, and I want to >know when a user closed the program, I should close the handle to the >process immediately after starting it? And then Process.kill(0, >) would return an exception once the user closed the program? > >Joe > You cannot close the hanle if the process is still alive. You can use WaitForSingleObject or Process.waitpid to wait until child process exits like this: require 'win32/process' include Windows::Handle info = Process.create :app_name=>'notepad' Process.waitpid(info.process_id) CloseHandle(info.process_handle) CloseHandle(info.thread_handle) Regards, Park Heesob _________________________________________________________________ Express yourself instantly with MSN Messenger! Download today it's FREE! http://messenger.msn.click-url.com/go/onm00200471ave/direct/01/