[Mono-list] Question on unix signal handling

mickeyf mickey at thesweetoasis.com
Mon Jan 21 20:32:10 UTC 2013

I'm finding that if I run height8's example code exactly as is, as an
independent application, it works as expected. 

If I use that identical code to watch a UnixSignal and to shut down my
application, there is no indication that SIGTERM, SIGINT or SIGQUIT are
being caught. The big difference is probably that I do have multiple threads
running (in the managed code only). I have made sure that there is no
reference to signal handling in the unmanaged libraries or anywhere else in
the C# code.

Ctrl-C (with no special handling at all) does seem to halt console output,
which implies that this is being caught at some low level. However, after a
Ctrl-C, "ps aux | grep myapp" shows that I still have myapp.exe and
/usr/bin/cli myapp.exe running, and one of the devices I'm talking to shows
that it's still connected. In any case, UnixSignal.WaitAny doesn't seem to
be behaving as I hoped. 

I'm guessing that some other thread must be getting the signals. The fact
that Ctrl-C is not ignored supports this. 

I can shut the 2 listed processes down with a script that looks for that
name and sends a kill, but that by itself does not clean up everything as it

Interestingly, a Console.CancelKeyPress handler does catch Ctrl-C and allows
me to call a shut down routine that shuts down all my running processes,
releases resources, etc. 

So on the one hand I do have a way to cleanly shut down this app, and my
immediate problem is solved. On the other hand, I'm still missing something
about how to effectively use UnixSignal in mono.

View this message in context: http://mono.1490590.n4.nabble.com/Question-on-unix-signal-handling-tp4658167p4658215.html
Sent from the Mono - General mailing list archive at Nabble.com.

More information about the Mono-list mailing list