For Programmers: Free Programming Magazines  


Home > Archive > Unix Programming > June 2007 > When the SIGTTOU is delivered









You are viewing an archived Text-only version of the thread. To view this thread in it's original format and/or if you want to reply to this thread please [click here]

 

Author When the SIGTTOU is delivered
Bin Chen

2007-06-25, 8:06 am

Hi,

The manual said it is delivered when a background process try to write
to control tty, so I wrote a small program to test, it can't receive
the signal.

gcc a.c -o a
../a &

a.c:
#include <signal.h>
#include <unistd.h>
#include <stdio.h>

void ttin()
{
printf("ttin.\n");
return;
}

void ttou()
{
printf("ttou.\n");
return;
}

main()
{
signal(SIGTTIN, ttin);
signal(SIGTTOU, ttou);

// getchar();
putchar('a');
}

So what's the problem.

Thanks.
Bin

Alan Curry

2007-06-25, 8:06 am

In article <1182739515.093413.224200@j4g2000prf.googlegroups.com>,
Bin Chen <binary.chen@gmail.com> wrote:
>Hi,
>
>The manual said it is delivered when a background process try to write
>to control tty, so I wrote a small program to test, it can't receive
>the signal.


Hopefully your manual also says, somewhere, that SIGTTOU is only sent if the
tty has the TOSTOP flag enabled. stty tostop, or see tcsetattr(3) to set it
from within your C code.

>void ttou()
>{
> printf("ttou.\n");


Nasty. Writing to the tty from within the signal handler that gets invoked
when you try to write to the tty. And it's in the background so there's no
^C'ing it. You got me. (I kill -9'ed it from another tty).

> return;
>}


--
Alan Curry
pacman@world.std.com
Sponsored Links







Also available: Server administration forum archive | Web Design forum archive | Software forum archive | Hardware reviews archive

Copyright 2008 codecomments.com