On 19/09/05, Otto Moerbeek <[EMAIL PROTECTED]> wrote:
> On Mon, 19 Sep 2005, Andreas Kahari wrote:
> > On 19/09/05, Damien Miller <[EMAIL PROTECTED]> wrote:
> > > Andreas Kahari wrote:
> > > > (the WINCH signal is delivered when the terminal window changes size)
> > >
> > > SIGWINCH is ignored by default, otherwise your sleep(1) would exit if
> > > you changed the size of your xterm. See signal(3) for the full list.
> >
> > Ok, so sleep(1) is explicitly ignoring the signal.  Can I get it be
> > interrupted by the signal instead?  No, maybe that won't solve my
> > problem because the installed handler ('eval $(resize)') wouldn't be
> > run, I guess.
> 
> If a program handles SIGWINCH both the shell trap handler and the
> program's handler will get called.
> 
> #!/bin/ksh
> 
> trap 'eval echo hi from sh' WINCH
> 
> while true; do
>         ./a.out
>         echo done sleeping $?
> done
> 
> #include <signal.h>
> #include <stdio.h>
> #include <unistd.h>
> 
> void hi(int a)
> {
>         char p[] = "hi from program\n";
>         write(0, p, sizeof(p) - 1);
> }
> 
> int
> main()
> {
>         signal(SIGWINCH, hi);
>         return sleep(10);
> }
> 
> If you run the shell script en resize the window, you'll see:
> 
> hi from program
> hi from sh
> done sleeping 4

This is most helpful.  I think I understand how this works now.

Thanks a lot.

Andreas

-- 
Andreas Kahari

Reply via email to