signal handler for SIGCHLD


 
Thread Tools Search this Thread
Top Forums Programming signal handler for SIGCHLD
Prev   Next
# 1  
Old 06-29-2005
signal handler for SIGCHLD

Hi,

I have an c++ application which uses the function fork and execvp().
The parent does not wait until the child ends. The parents just creates children and let them do their stuff.
You can see the parent program as a batch-manager.

I have added a SIGCHLD handler to the program:

void zombie_handler(int iSignal)
{
signal(SIGCHLD,zombie_handler); //reset handler to catch SIGCHLD for next time;
int status;
pid_t pid;

pid = wait(&status); //After wait, child is definitely freed.
printf("pid = %d , status = %d\n", pid, status);
}

int main(int argc,char* argv[])
{
signal(SIGCHLD,zombie_handler);
...
while (condition)
{
fork();
//do child-actions & do not wait for child to finish. We can't afford to wait...
}
}

- How can i avoid signal races in this case? I don't want another SIGCHLD-signal while I'm busy with processing a SIGCHLD-signal !! I don't want to ignore the signal neither when I'm processing a SIGCHLD-signal (cant afford to loose information about childs)
- In the signal-handler I have added the wait() function. The time that wait will need will be none, because the child has already been terminated but is not freed yet? Am I correct?

Can anyone help me with this?

Best regards,
Jens
 
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Programming

problem in doing coding of signal handler

i m unble to execute code of signal handler using a) Wait b) Waitpid (1 Reply)
Discussion started by: madhura
1 Replies

2. Shell Programming and Scripting

Perl Signal Handler

I was working on some Perl code that does signal handling and I came across this one liner and wasn't sure what it was doing. local $SIG{__DIE__} = sub {$! = 2; die $_;}; I think the first part of the anonymous subroutine is setting $! to 2, but I am not sure what the second part is doing. ... (1 Reply)
Discussion started by: SFNYC
1 Replies

3. Programming

Signal Handler Hangs

Hi, I have a problem with signal handler algorithm in linux. My code is hanging ( It is continuously looping inside the signal handler) . I am pasting my code here... Please provide me some help regarding this. I googled many places and wrote this code.. but doesnt seem to be working without... (6 Replies)
Discussion started by: sree_ec
6 Replies

4. Programming

SIGCHLD interrupts its own handler

Hi. I have a program whose job it is to manage 15 child processes. Sometimes these children die (sometimes deliberately other times with a SEGV). This causes a SIGCHLD to be sent to my program which uses waitpid() in the signal handler to gather information and, in most cases, restart the child.... (3 Replies)
Discussion started by: jrichemont
3 Replies

5. Shell Programming and Scripting

Perl - Problems with Signal Handler

I have a problem with signal handlers not working. I have a long 1000 line code and somehow this code for signal handling is not working: $SIG{INT} = \&interrupt; sub interrupt { print STDERR "Caught a control c!\n"; exit; # or just about anything else you'd want to do } Any... (2 Replies)
Discussion started by: som.nitk
2 Replies

6. Programming

Usage of exit() inside a signal handler

Is it ok to use exit() inside a signal handler? I catch SIGUSR1 in a signal handler and I try to close a file and then exit. The result is inconsistent. Sometimes the process exit and sometimes it returns to the original state before the signal handler was invoked. Perhaps exit is not legal in... (8 Replies)
Discussion started by: Tuvia
8 Replies

7. Programming

Runaway SIGALRM signal handler

I have written a program to demonstrate a problem I have encountered when using BSD style asynchronous input using the O_ASYNC flag in conjunction with a real time interval timer sending regular SIGALRM signals to the program. The SIGIO handler obeys all safe practices, using only an atomic update... (8 Replies)
Discussion started by: stewartw
8 Replies

8. Programming

signal handler problems

Hey guys, I am trying to write a little shell, and was writing a signal handler to handle SIGINT (I am using 'stty intr ^C' and using ctrl-C to give SIGINT). I wrote this signal handler: void handle_sigint() { write(2,"handling sigint\n",16); write(1,"\nshell% ",8); } ... (4 Replies)
Discussion started by: blowtorch
4 Replies

9. UNIX for Advanced & Expert Users

catch SIGCHLD signal in parent process

I want to catch SIGCHLD signal in parent process. I can't use wait() system call to catch SIGCHLD according to project requirment. Operating system linux 3.1 can any one have a solution for this. Thanking you, ranjan (2 Replies)
Discussion started by: ranjan
2 Replies

10. Shell Programming and Scripting

shell script signal handler

AIX 4.3.3 I am trying to write a signal handler into a ksh shell script. I would like to capture the SIGTERM, SIGINT, and the SIGTSTP signals, print out a message to the terminal, and continue executing the script. I have found a way to block the signals: #! /bin/ksh SIGTERM=15 SIGINT=2... (2 Replies)
Discussion started by: jalburger
2 Replies
Login or Register to Ask a Question
pthread_atfork(3T)														pthread_atfork(3T)

NAME
pthread_atfork() - register fork handlers. SYNOPSIS
PARAMETERS
prepare This function is called before performing the parent This function is called in the parent process after performing the child This function is called in the child process after performing the DESCRIPTION
The function allows an application to install fork handlers. These fork handlers will be called before and after a operation. These han- dlers will be called in the context of the thread calling Similar to the handlers, the application does not need to do anything special for these fork handlers to be called. They will be invoked by the system when a operation occurs. The function is called before the operation in the parent process. The function is called after the operation in the parent process. The function is called after the operation in the child process. If a fork handler is not needed in one or more of these three places, the appropriate fork handler parameter may be set to NULL. A process may install multiple fork handling functions. The and fork handlers will be called in the order in which they were installed (i.e., The fork handlers will be called in the opposite order (i.e., RETURN VALUE
Upon successful completion, returns zero. Otherwise, an error number is returned to indicate the error (the variable is not set). ERRORS
If any of the following occur, the function returns the corresponding error number: [ENOMEM] There is insufficient table space to install the fork handlers. AUTHOR
was derived from the IEEE POSIX P1003.1c standard. SEE ALSO
fork(2), atexit(3). STANDARDS CONFORMANCE
Pthread Library pthread_atfork(3T)