SIGCHLD trace problem


 
Thread Tools Search this Thread
Top Forums Programming SIGCHLD trace problem
# 1  
Old 09-23-2008
Question SIGCHLD trace problem

Hello,

I'd like to know whether it is possible to let the parent know who kills its child process. The case is likely as below:

if there are four processes, we call them A, B, C and D. B is the child of A, and can be killed by both C and D. if B is killed, then A will receive SIGCHLD from B. But how to let A know who kills B? C or D ?

Thanks in advance !
# 2  
Old 09-23-2008
currently I can find two ways to do that, but not so neatly:

1) let C or D send a signal to inform A before it kills B;

2) let C or D write a flag to a file before it kills B, A checks this flag in this file when handle SIGCHLD from B.

other cleaner solutions ?
Thanks.
# 3  
Old 09-23-2008
have D send B a SIGUSR1
have C send B a SIGUSR2

B traps both SIGUSR1, and SIGUSR2. Then exits optionally with the value of the signal
A calls waitpid() on B, then calls WTERMSIG or WEXITSTATUS if B exited with the SIG value. This requires C code.
# 4  
Old 09-23-2008
Thanks for your reasonable advice ...

I probably did not state clearly about the case ... well, for the example ABCD case, it's simple because there are only two processes that could kill the child B.
What I really want to know is that, if it is illegal for any process except C to kill process B, A have to check that who kills B when receives SIGCHLD from B (what if we kill B manually by "kill -9" command ? perhaps A can distinguish them by pid of the killer ?).
# 5  
Old 09-23-2008
kill -9 cannot be caught by a process, it just exits. It cannot know who killed it.
And, as long as "whoever" B,C,D,...Z has the privilege to send a signal to B (it can send a signal to itself you know) kill -9 will always clobber B. So there is no "illegal" anything about sending signals.

Rather than go on about this, what are you trying to do? It sounds like you got bogged down trying to solve something else, rather than signals.
# 6  
Old 09-23-2008
yes, there is really a pratical problem I want to fix...I'm sorry for my poor English that I did not express myself clearly with the word "illegal"...Smilie

what I meant is that in our system or according to our design requirements, there is a process(just like B in this example), its parent is A, and A will handle SIGCHLD from B. But we can only allow one process(C) to kill B, any other process killing B will be considered as an error case in A.

so we have to distinguish who kills this process B.

Actually, B here is ntpd service, we want to start it as A's child, let ntpd run in foreground mode. But if we re-configure ntpd, ntpd has to be restarted to reload the new configuration. So we allow C who has the privilege to re-configure ntpd to restart ntpd, but not other processes.

currently, I'd like to let C set a flag in /var/run/ntpd.pid file after re-configuration and before restart ntpd.

So I come here for help to see whether there is more smart ideas..Smilie

Thank you.
# 7  
Old 09-23-2008
A cannot tell who sent the signal to B. B cannot tell who sent the signal to it.
The only thing you can do is to to write something to a file before you kill the process.

Or, if you can make it work, create a completely distinct user for ntpd, one that has privilege to run ntpd. Then nobody but that user (or root) can kill off the ntpd daemon.

Do you have random processes killing the ntpd daemon?
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Dummies Questions & Answers

using SIGCHLD

I'm testing out how to use SIGCHLD and I had a question about intercepting the signal and executing an action in the signal handler. signal(SIGCHLD,countdown); What I'm trying to achieve is be able to printf(Hello) every second that child is set to sleep. I'm setting sleep = 3; so... (1 Reply)
Discussion started by: l flipboi l
1 Replies

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

3. Solaris

Log Trace

Hi I would like to display only error messages from my log files while monotring application on my solaris box using tail command. Is there other way we can monitor please let me know? In general # tail -f "xyz.log' ---> this will display current activity of the logs, instead i would like... (4 Replies)
Discussion started by: gkrishnag
4 Replies

4. UNIX for Dummies Questions & Answers

Who sent the process SIGCHLD ?

I want to know whicj process send the signal SIGCHLD to the parent's child. Thank you in advance, (1 Reply)
Discussion started by: Puntino
1 Replies

5. UNIX for Dummies Questions & Answers

About SIGCHLD

When the SIGCHLD is sent? SIGCHLD is sent either a child exits spontaneously (e.g. exit(0)) or it is killed ? thank you in advance (3 Replies)
Discussion started by: Puntino
3 Replies

6. Programming

adv reqd on SIGCHLD on accept call

Hi, I have small problem. In my (concurrent)server programm, I am handling accept problem from client like this. sample of server code. /*******************/ end = 0; while (! end ) { sockfd = accept(...) if(sockfd == -1) { if (errno == EINTR) /* this is bcoz... (5 Replies)
Discussion started by: stevenjagan
5 Replies

7. Programming

When is SIGCHLD is raised.

Hi, I have 2 processes X and Y. Y is exec() from X. In Y i have an exit handler, which is called when i return from main. With in exit handler i delete and object which in turn calls the destructor of the object, which terminates all the threads of Y. I believe that SIGCHLD is raised by Y as... (4 Replies)
Discussion started by: supersumanth
4 Replies

8. Programming

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... (3 Replies)
Discussion started by: jens
3 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. Programming

Need help with SIGCHLD

Hello everybody, this is my first post on this forum. I have a program that has a child process that sleeps for 5 second and exit. I'm suppose to modify this program so that when the child exits, the parent reports the exit status of the child, so I also have to deal with SIGINT and SIGQUIT. Can... (1 Reply)
Discussion started by: Unlimited Sky
1 Replies
Login or Register to Ask a Question