On 11/10/06, Park Heesob <phasis68 / hotmail.com> wrote:
>
> Hi,
>
> >From: J-Van <joevandyk / gmail.com>
> >Reply-To: ruby-talk / ruby-lang.org
> >To: ruby-talk / ruby-lang.org (ruby-talk ML)
> >Subject: Re: win32/process question
> >Date: Fri, 10 Nov 2006 15:23:58 +0900
> >
> >I guess I should note that this is after I require 'win32/process'
> >(which is installed via a gem).
> >
> >On 11/9/06, J-Van <joevandyk / gmail.com> wrote:
> >>On Windows XP, Ruby 1.8.5:
> >>
> >># start notepad
> >>irb(main):003:0> info = Process.create :app_name => "notepad"
> >>=> #<struct Struct::ProcessInfo process_handle=1916,
> >>thread_handle=1912, process_id=3536, thread_id=3088>
> >>
> >># notepad running
> >>irb(main):004:0> Process.kill 0, info.process_id
> >>=> [3536]
> >>
> >># kill notepad
> >>irb(main):005:0> Process.kill 9, info.process_id
> >>=> [3536]
> >>
> >># notepad's dead, but why doesn't this throw an exception?!
> >>irb(main):006:0> Process.kill 0, info.process_id
> >>=> [3536]
> >>
> >>Any ideas?
> >>Thanks,
> >>Joe
> >>
> >
> 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'
> => #<struct Struct::ProcessInfo process_handle=1916, thread_handle=1912,
> 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

Fantastic, thanks!

Joe