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
-Otto