Win32 Process Signals

Hey!

I user win32/Process to spawn a child Process in my Application

myProc = Process.create(:app_name => “ruby test.rb”)

and kill it with

Process.kill(1, myProc.process_id)

How can i trap the signal in the Child Process to do cleanup stuff?

thx

$ ri Signal.trap
----------------------------------------------------------- Signal::trap
Signal.trap( signal, proc ) => obj
Signal.trap( signal ) {| | block } => obj

 Specifies the handling of signals. The first parameter is a signal
 name (a string such as ``SIGALRM'', ``SIGUSR1'', and so on) or a
 signal number. The characters ``SIG'' may be omitted from the
 signal name. The command or block specifies code to be run when the
 signal is raised. If the command is the string ``IGNORE'' or
 ``SIG_IGN'', the signal will be ignored. If the command is
 ``DEFAULT'' or ``SIG_DFL'', the operating system's default handler
 will be invoked. If the command is ``EXIT'', the script will be
 terminated by the signal. Otherwise, the given command or block
 will be run. The special signal name ``EXIT'' or signal number zero
 will be invoked just prior to program termination. trap returns the
 previous handler for the given signal.

     Signal.trap(0, proc { puts "Terminating: #{$$}" })
     Signal.trap("CLD")  { puts "Child died" }
     fork && Process.wait

 produces:

     Terminating: 27461
     Child died
     Terminating: 27460


Avdi

Home: http://avdi.org
Developer Blog: http://avdi.org/devblog/
Twitter: http://twitter.com/avdi
Journal: http://avdi.livejournal.com

Avdi G. wrote:

     Signal.trap(0, proc { puts "Terminating: #{$$}" })
     Signal.trap("CLD")  { puts "Child died" }
     fork && Process.wait

 produces:

     Terminating: 27461
     Child died
     Terminating: 27460

Yeah, i know. But this obviously doesn’t work with win32.

My traps don’t catch anything gg

ck

On Tue, 15 Apr 2008 07:59:42 -0500, Christian K. wrote:

Avdi G. wrote:

     Signal.trap(0, proc { puts "Terminating: #{$$}" })
     Signal.trap("CLD")  { puts "Child died" }
     fork && Process.wait

[snip]

Yeah, i know. But this obviously doesn’t work with win32.

My traps don’t catch anything gg

If you can’t find a more portable solution, look at Win32 events,
starting
with the CreateEvent function.