Hi, there
If I have several threads and set a signal handler proc with Kernel::trap, what thread will actually execute the handler? Is it always guaranteed to be the main thread as I see it now?
Thank you,
Gennady.
Hi, there
If I have several threads and set a signal handler proc with Kernel::trap, what thread will actually execute the handler? Is it always guaranteed to be the main thread as I see it now?
Thank you,
Gennady.
Hi,
At Thu, 10 Jun 2004 04:22:41 +0900,
Gennady wrote in [ruby-talk:102985]:
If I have several threads and set a signal handler proc with
Kernel::trap, what thread will actually execute the handler? Is it
always guaranteed to be the main thread as I see it now?
Yes, it's a feature.
--
Nobu Nakada
Hi,
At Thu, 10 Jun 2004 04:22:41 +0900,
Gennady wrote in [ruby-talk:102985]:If I have several threads and set a signal handler proc with
Kernel::trap, what thread will actually execute the handler? Is it
always guaranteed to be the main thread as I see it now?Yes, it's a feature.
Thank you very much, Nobu. By the way, I was trying to temporarily set a signal handler with trap:
sigquit_handler = trap "SIGQUIT", "IGNORE"
... <the code spawning a process (with popen) where I want SIGQUIT
trap "SIGQUIT", sigquit_handler
I noticed that when the first trap returns nil, the second one does not restore a signal handler to "DEFAULT", as I would expect. I have to do something like that:
trap "SIGQUIT", (sigquit_handler or "DEFAULT")
Thanks again,
Gennady.
--
Nobu Nakada
Sincerely,
Gennady Bystritsky
On Jun 9, 2004, at 6:52 PM, nobu.nokada@softhome.net wrote:
Hi,
At Thu, 10 Jun 2004 16:37:02 +0900,
Gennady Bystritsky wrote in [ruby-talk:103056]:
sigquit_handler = trap "SIGQUIT", "IGNORE"
... <the code spawning a process (with popen) where I want SIGQUIT
>
trap "SIGQUIT", sigquit_handlerI noticed that when the first trap returns nil, the second one does not
restore a signal handler to "DEFAULT", as I would expect. I have to do
something like that:trap "SIGQUIT", (sigquit_handler or "DEFAULT")
Which version of ruby do you use? It should return nil at the
first.
$ ruby18 -v -e 'p trap("SIGQUIT", nil)'
ruby 1.8.2 (2004-06-06) [i686-linux]
"DEFAULT"
--
Nobu Nakada
I use 1.6.8, and there trap returns nil if no handler is currently in use. I checked in 1.8.0 and it returns "DEFAULT", just as you mentioned. Thanks a lot. I will be gradually switching to 1.8.x.
Gennady.
[linux.gfbs:274]gfb> ruby -v -e 'p trap("SIGQUIT", "IGNORE")'
ruby 1.6.8 (2003-10-15) [i686-linux]
nil
[linux.gfbs:275]gfb> ruby8 -v -e 'p trap("SIGQUIT", "IGNORE")'
ruby 1.8.0 (2003-08-04) [i686-linux]
"DEFAULT"
nobu.nokada@softhome.net wrote:
Hi,
At Thu, 10 Jun 2004 16:37:02 +0900,
Gennady Bystritsky wrote in [ruby-talk:103056]:sigquit_handler = trap "SIGQUIT", "IGNORE"
... <the code spawning a process (with popen) where I want SIGQUITtrap "SIGQUIT", sigquit_handler
I noticed that when the first trap returns nil, the second one does not restore a signal handler to "DEFAULT", as I would expect. I have to do something like that:
trap "SIGQUIT", (sigquit_handler or "DEFAULT")
Which version of ruby do you use? It should return nil at the
first.$ ruby18 -v -e 'p trap("SIGQUIT", nil)'
ruby 1.8.2 (2004-06-06) [i686-linux]
"DEFAULT"