05-02-2008
catching a signal from child process
i am creating children processes using fork system call
every child i create goes to sleep for random time.
when child stops running how can i catch his signal and turminate the child
10 More Discussions You Might Find Interesting
1. Programming
Hi,
Recently I was reading some c coding by some colleagues and I noticed that the above trend. They will create a pipe for the process then they will use the standard signal handler to capture a particular signal and write that signal to the pipe. On the other end, the process will read the... (7 Replies)
Discussion started by: joseph_ng
7 Replies
2. Programming
Hi!
I want to catch all signals that my program receives print their name and then execute the default handler.
Can you help me on that?
I've tried the following code:
#include <stdio.h>
#include <unistd.h>
#include <signal.h>
void (*hnd)(int i);
char signals =
{
"SIGHUP",... (7 Replies)
Discussion started by: dark_knight
7 Replies
3. UNIX for Dummies Questions & Answers
Hi All,
I facing a problem in handling signals between parent process communication. I am trying to send a signal(SIGINT) from child to parent. I am using kill function to do so and I am trying to read the signal using sigaction(). But the program is ending abruptly and I am not able to figure out... (4 Replies)
Discussion started by: vkn_1985
4 Replies
4. Shell Programming and Scripting
Hello all!
I'm writing a script that will catch when an outside process crashes (SIGHUP, right?) without having to loop into infinity.
With that in mind, I came across the trap utility and thought if could be used to monitor another process other than it's own. But from what I've read, I'm... (1 Reply)
Discussion started by: mashiox
1 Replies
5. Programming
I'm trying to do a program that makes activate an signal (SINGALARM) when the next child of a son appears but this not works.
I have to caught the next child o the other (pid), to send a singnal which inform a menssage.
It's anything worng in the code?
thanks.
the code:
#include... (2 Replies)
Discussion started by: marmaster
2 Replies
6. Programming
Hello. I want to make a child do some stuff,wait,then the parent does some stuff and then child does some stuff and waits again.I have made the following but it does not work.Can anybody help me?
pid1 = fork();
if (pid1 == -1)
{
perror("Can't create child\n");
... (18 Replies)
Discussion started by: Cuervo
18 Replies
7. Programming
Hi, i want that the parent process start before the child, this code doesn't work,
if the child start before the parent it wait for signal, then the father send the signal SIGALRM and the child catch it and call printf;
else the father call printf and send the signal to the child that call its... (1 Reply)
Discussion started by: blob84
1 Replies
8. Emergency UNIX and Linux Support
Hello, everyone.
Here's a program:
pid_t pid = fork();
if (0 == pid) // child process
{
execvp ...;
}
I send a signal (such as SIGINT) to the parent process, the child process receive the signal as well as the parent process.
However I don't want to child process to receive the... (7 Replies)
Discussion started by: jackliang
7 Replies
9. Shell Programming and Scripting
Hi everyone
i am very new to linux , working on bash shell.
I am trying to solve the given problem
1. Create a process and then create children using fork
2. Check the Status of the application for successful running.
3. Kill all the process(threads) except parent and first child... (2 Replies)
Discussion started by: vizz_k
2 Replies
10. Shell Programming and Scripting
Hi, I would like to ask, if is it possible to quit running loop in the script any other way than catching the trap signal. Ctrl-C ends only current running instance of process but not whole script. Any clues? (3 Replies)
Discussion started by: smoofy
3 Replies
LEARN ABOUT OPENSOLARIS
wait
wait(3C) Standard C Library Functions wait(3C)
NAME
wait - wait for child process to stop or terminate
SYNOPSIS
#include <sys/types.h>
#include <sys/wait.h>
pid_t wait(int *stat_loc);
DESCRIPTION
The wait() function will suspend execution of the calling thread until status information for one of its terminated child processes is
available, or until delivery of a signal whose action is either to execute a signal-catching function or to terminate the process. If more
than one thread is suspended in wait(), waitpid(3C), or waitid(2) awaiting termination of the same process, exactly one thread will return
the process status at the time of the target process termination. If status information is available prior to the call to wait(), return
will be immediate.
If wait() returns because the status of a child process is available, it returns the process ID of the child process. If the calling
process specified a non-zero value for stat_loc, the status of the child process is stored in the location pointed to by stat_loc. That
status can be evaluated with the macros described on the wait.h(3HEAD) manual page.
In the following, status is the object pointed to by stat_loc:
o If the child process terminated due to an _exit() call, the low order 8 bits of status will be 0 and the high order 8 bits will
contain the low order 7 bits of the argument that the child process passed to _exit(); see exit(2).
o If the child process terminated due to a signal, the high order 8 bits of status will be 0 and the low order 7bits will contain
the number of the signal that caused the termination. In addition, if WCOREFLG is set, a "core image" will have been produced;
see signal.h(3HEAD) and wait.h(3HEAD).
One instance of a SIGCHLD signal is queued for each child process whose status has changed. If wait() returns because the status of a child
process is available, any pending SIGCHLD signal associated with the process ID of that child process is discarded. Any other pending
SIGCHLD signals remain pending.
If the calling process has SA_NOCLDWAIT set or has SIGCHLD set to SIG_IGN, and the process has no unwaited children that were transformed
into zombie processes, it will block until all of its children terminate, and wait() will fail and set errno to ECHILD.
If a parent process terminates without waiting for its child processes to terminate, the parent process ID of each child process is set to
1, with the initialization process inheriting the child processes; see Intro(2).
RETURN VALUES
When wait() returns due to a terminated child process, the process ID of the child is returned to the calling process. Otherwise, -1 is
returned and errno is set to indicate the error.
ERRORS
The wait() function will fail if:
ECHILD The calling process has no existing unwaited-for child processes.
EINTR The function was interrupted by a signal.
USAGE
Since wait() blocks on a stopped child, a calling process wanting to see the return results of such a call should use waitpid(3C) or
waitid(2) instead of wait(). The wait() function is implemented as a call to waitpid(-1, stat_loc, 0).
ATTRIBUTES
See attributes(5) for descriptions of the following attributes:
+-----------------------------+-----------------------------+
| ATTRIBUTE TYPE | ATTRIBUTE VALUE |
+-----------------------------+-----------------------------+
|Interface Stability |Standard |
+-----------------------------+-----------------------------+
|MT-Level |Async-Signal-Safe |
+-----------------------------+-----------------------------+
SEE ALSO
Intro(2), exec(2), exit(2), fork(2), pause(2), waitid(2), ptrace(3C), signal(3C), signal.h(3HEAD), waitpid(3C), wait.h(3HEAD),
attributes(5)
SunOS 5.11 9 Jun 2004 wait(3C)