Signals and threads

G

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.
 
N

nobu.nokada

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.
 
G

Gennady Bystritsky

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
ignored>
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.

Sincerely,
Gennady Bystritsky
 
N

nobu.nokada

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
ignored>
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")

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"
 
G

Gennady

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
ignored>
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")


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"
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"
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Similar Threads


Members online

No members online now.

Forum statistics

Threads
474,431
Messages
2,571,677
Members
48,796
Latest member
Greg L.

Latest Threads

Top