Sponsored Content
Full Discussion: Multiple Signals
Top Forums Programming Multiple Signals Post 34133 by Perderabo on Thursday 6th of February 2003 11:09:26 AM
Old 02-06-2003
Quote:
Originally posted by S.P.Prasad
Take an example in a signal driven I/O for Sockets:
When data arrives , the signal is generated. While the signal handler is executing ( reading data ) , two more data packets arrives at same time , causing signal to be generated two more times but as per our discussion the signal handler will be called only once. Hence the third data packet will only be read only when fourth data packet arrives at the port.
In that case the signal handler should be prepared to read 0 or more packets for each receipt of a SIGIO.

Looking at a few manpages, I see that doing this portably is easier said than done. It looks like you can set the O_NONBLOCK option and then loop doing recv() until you get -1 with errno set to either EAGAIN or EWOULDBLOCK.

But in general, this is the trick. Whatever the signal means, you need to handle it zero or more times. With any signal delivered to a process by the kernel there should be some way to loop attempting what is required and detecting when you've done that thing enough.

If another process is sending you signals with the expectation that your process can reliably count them, then someone made a design error. The processes would need to switch to another form of IPC.
 

10 More Discussions You Might Find Interesting

1. Programming

Signals In HP-UX

does the way of handling, interrupting signals in HP-UX same as that of solaris. If there is difference than what it is.?:confused: (1 Reply)
Discussion started by: kapilv
1 Replies

2. Programming

Threads Signals

Hi In my process there are few threads. Now, lets say all the threads are blocked for some reason or other.. now i read it somewhere that the kernel in this situation sends in some signal which can be caught. please let me know what signal is it and more details about that.. Thanks in... (1 Reply)
Discussion started by: uday_kumar_spl
1 Replies

3. UNIX for Dummies Questions & Answers

Signals...

(posted this in the scripting forum as well, but figured it should go here) So, what's going on is this: For our program, we had to create our own shell, and if the user pressed ctrl-c just at the cmdline, then this signal would be ignored, but if there is a foreground process running, let's... (0 Replies)
Discussion started by: blind melon
0 Replies

4. Programming

Using Signals

How can use signals in a C program If i want a child program to signal it's parent program that it(child) program has completed the task that it was assigned.:confused: (2 Replies)
Discussion started by: kapilv
2 Replies

5. UNIX for Dummies Questions & Answers

threads and signals

can any one give me an example of a concurrency program in threads and signals, i.e how to deliver messages between threads using signals. thanks (0 Replies)
Discussion started by: moe_7
0 Replies

6. Programming

threads and signals

can any one give me an example of a concurrency program in threads and signals, i.e how to deliver messages between threads using signals. thanks (2 Replies)
Discussion started by: moe_7
2 Replies

7. OS X (Apple)

How to debug signals

Hi, In our program, we are using SIGTERM and i tired to put break point in this function. But my debuger is unable to brake at that point. I am working on Mac X and using XCode. Thanks (0 Replies)
Discussion started by: Saurabh78
0 Replies

8. Programming

Can we debug Signals

Hi, In our program, we are using SIGTERM and i tired to put break point in this function. But my debuger is unable to brake at that point. I am working on Mac X and using XCode. Thanks (1 Reply)
Discussion started by: Saurabh78
1 Replies

9. Programming

C++ signals Linux

how can do this programs in c++ Program description: Infinite loop in a program starts working with 2 seconds the screen (console) "I 'm trying" to write, but it automatically after 10 seconds, the screen "Close" will terminate the execution of typing. c++ code (3 Replies)
Discussion started by: ss54
3 Replies

10. UNIX for Advanced & Expert Users

Help with Signals

Hi All, The problem statement is as below: Problem: A process (exe) is getting executed in background. The output of this process is getting logged in a file. After successfully running for some time the process gets terminated. In the log file following is present: ^M[7m Interrupt ^M[27m... (8 Replies)
Discussion started by: Praty.27
8 Replies
signal(3UCB)					     SunOS/BSD Compatibility Library Functions					      signal(3UCB)

NAME
signal - simplified software signal facilities SYNOPSIS
/usr/ucb/cc [ flag ... ] file ... #include <signal.h> void (*signal(sig, func))(); int sig; void (*func)(); DESCRIPTION
signal() is a simplified interface to the more general sigvec(3UCB) facility. Programs that use signal() in preference to sigvec() are more likely to be portable to all systems. A signal is generated by some abnormal event, initiated by a user at a terminal (quit, interrupt, stop), by a program error (bus error, etc.), by request of another program (kill), or when a process is stopped because it wishes to access its control terminal while in the background (see termio(7I)). Signals are optionally generated when a process resumes after being stopped, when the status of child pro- cesses changes, or when input is ready at the control terminal. Most signals cause termination of the receiving process if no action is taken; some signals instead cause the process receiving them to be stopped, or are simply discarded if the process has not requested other- wise. Except for the SIGKILL and SIGSTOP signals, the signal() call allows signals either to be ignored or to interrupt to a specified location. See sigvec(3UCB) for a complete list of the signals. If func is SIG_DFL, the default action for signal sig is reinstated; this default is termination (with a core image for starred signals) except for signals marked with o or a dagger.. Signals marked with o are discarded if the action is SIG_DFL; signals marked with a dagger cause the process to stop. If func is SIG_IGN the signal is subsequently ignored and pending instances of the signal are discarded. Other- wise, when the signal occurs further occurrences of the signal are automatically blocked and func is called. A return from the function unblocks the handled signal and continues the process at the point it was interrupted. If a caught signal occurs during certain functions, terminating the call prematurely, the call is automatically restarted. In particular this can occur during a read(2) or write(2) on a slow device (such as a terminal; but not a file) and during a wait(3C). The value of signal() is the previous (or initial) value of func for the particular signal. After a fork(2) or vfork(2) the child inherits all signals. An exec(2) resets all caught signals to the default action; ignored signals remain ignored. RETURN VALUES
The previous action is returned on a successful call. Otherwise,-1 is returned and errno is set to indicate the error. ERRORS
signal() will fail and no action will take place if the following occurs: EINVAL sig is not a valid signal number, or is SIGKILL or SIGSTOP. SEE ALSO
kill(1), exec(2), fcntl(2), fork(2), getitimer(2), getrlimit(2), kill(2), read(2), sigaction(2), write(2), abort(3C), ptrace(3C), setjmp(3C), setjmp(3UCB), sigblock(3UCB), signal(3C), signal.h(3HEAD), sigstack(3UCB), sigvec(3UCB), wait(3C), wait(3UCB), termio(7I) NOTES
Use of these interfaces should be restricted to only applications written on BSD platforms. Use of these interfaces with any of the system libraries or in multi-threaded applications is unsupported. The handler routine func can be declared: void handler(signum) int signum; Here signum is the signal number. See sigvec(3UCB) for more information. SunOS 5.10 10 Jan 1996 signal(3UCB)
All times are GMT -4. The time now is 10:49 AM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy