Reputation: 3540
We have a small daemon application written in C for a couple of various UNIX platforms (this problem is happening in SunOS 5.10), that basically just opens up a serial port and then listens for information to come in via said port.
In this particular instance, the daemon appears to read a single transmission (like a file's worth of data) sent over via the serial port, then it receives a SIGINT. This happens every time. Other customers use this setup very similarly without receiving the SIGINT. Quite obviously, the users are NOT pressing Ctrl-C. We have a relatively simple signal handler in place, so we definitely know that that is what is happening.
What else could possibly be causing this? Googling around and looking through the questions here, I couldn't find much explanation as to other things that could cause a SIGINT. I also looked through the code and found no calls to raise() and only a single call to kill(pid, 0) which wouldn't send a SIGINT anyway.
Any thoughts or insight would definitely be appreciated.
Upvotes: 3
Views: 356
Reputation: 9640
I found an interesting blog post about debugging a problem with similar symptoms. While I doubt it's the same issue, it's got some very useful debugging tips for tracing the origin of signals.
Upvotes: 0
Reputation: 60843
If you do not want the serial port to become the controlling terminal for the process, open it using the open
flag O_NOCTTY
. If it is the controlling terminal, data from the serial port may be interpreted as an interrupt or other special character.
Upvotes: 2
Reputation: 11551
You didn't say how your signal handler is attached, but if you're able to attach it using sigaction(2) so as to get a siginfo_t
then it looks like that would include the pid that sent the signal (si_pid
).
Upvotes: 1