Velocity Reviews

Velocity Reviews (http://www.velocityreviews.com/forums/index.php)
-   C Programming (http://www.velocityreviews.com/forums/f42-c-programming.html)
-   -   Unis signal handling in parent child scenario. (http://www.velocityreviews.com/forums/t435342-unis-signal-handling-in-parent-child-scenario.html)

gnutuxy@yahoo.co.in 09-30-2004 05:47 AM

Unis signal handling in parent child scenario.
 
Hi,

I am newbie in the Unix system programming and in learning phase.
I usually read the libc manual and then try to implement small
programs to test/check the learnt thing.

I read the libc manual for signals and tried the program to check
whether child
inherits the signal handler intalled by parent befor fork.

I am totally confused about it because the code won't work as per the
the manual. Manual says child inherits signal action and signal mask.

My situation is as follows:
Question : Why I won't get message "Received the signal: #" on the
terminal, when I signaled child process with SIGINT?

==================glibc manual extract==============
* The set of pending signals (*note Delivery of Signal::) for the
child process is cleared. (The child process inherits its mask of
blocked signals and signal actions from the parent process.)
================================================== ==

My try : I just want to check that the signal handler installed in
Parent is
inherited by child ( this is what I interpreted from the
glibc manual,
the extract of the manual is highlighted above. )

Here is my code.
=================my code============================
#include <stdio.h>
#include <signal.h>
#include <unistd.h>
#include <sys/types.h>

void mysig_handler( int signum )
{
printf("Received the signal: %d", signum );
}

int main( int argc, char *argv[] )
{

pid_t chld;

signal( SIGINT, mysig_handler );

if( ( chld = fork() ) < 0 )
{
//error
printf("Fork Error!\n");
}
else if( chld == 0 )
{
//child
while(1)
{
}
}
else
{
//parent
while(1)
{
}
}
return(0);
}
================================================== ==
my softwares are
gcc version egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)
Kernel 2.2.14-12smp

Regards,
Vinay G.

Jonathan Adams 09-30-2004 06:47 AM

Re: Unis signal handling in parent child scenario.
 
In article <5de1c529.0409292147.5d499a31@posting.google.com >,
gnutuxy@yahoo.co.in wrote:

> Hi,
>
> I am newbie in the Unix system programming and in learning phase.
> I usually read the libc manual and then try to implement small
> programs to test/check the learnt thing.
>
> I read the libc manual for signals and tried the program to check
> whether child
> inherits the signal handler intalled by parent befor fork.
>
> I am totally confused about it because the code won't work as per the
> the manual. Manual says child inherits signal action and signal mask.
>
> My situation is as follows:
> Question : Why I won't get message "Received the signal: #" on the
> terminal, when I signaled child process with SIGINT?


Well, comp.unix.programmer (cross-posted, followup-to: set) would
probably be a better newsgroup, but your error is simple, and somewhat
on-topic:

> void mysig_handler( int signum )
> {
> printf("Received the signal: %d", signum );
> }


stdout is by default line-buffered. You either need to end your printf
format with '\n':

printf("Received the signal: %d\n", signum );

Or add an fflush(stdout); after the printf:

printf("Received the signal: %d", signum );
fflush(stdout);

if you want to get any output. You probably want the former. Back to
c.l.c off-topic-ness:

signal(3C) is a very old, crufty interface. You should look at the
manpage for sigaction(3C), the preferred interface. You might consider
picking up one of:
_Advanced Programming in the Unix Environment_
(Stevens, ISBN 0201563177)
_Solaris Systems Programming_
(Rich Teer, ISBN 0201750392)

The latter, despite the title, contains general Unix programming tips,
and is kind of an up-to-date APUE in parts, from what I hear.

Cheers,
- jonathan

gnutuxy@yahoo.co.in 10-04-2004 01:13 AM

Re: Unis signal handling in parent child scenario.
 
Thanks Jonathan,

It works!
And thanks for suggesting the com.unix.programming.

Regards,
Vinay Gadekar.


All times are GMT. The time now is 08:06 AM.

Powered by vBulletin®. Copyright ©2000 - 2013, vBulletin Solutions, Inc.
SEO by vBSEO ©2010, Crawlability, Inc.


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57