Hi ! Here is patch to fix a bug where zsh can become unkillable (except of course with SIGKILL), I use Linux-2.6/i386 so the POSIX_SIGNALS macro is defined. signal_block() and signal_unblock() use two global variables dummy_sigset1 and dummy_sigset2. I observed a race between child_block() and oldmask = signal_block(newmask); /* Block all signals temporarily */ called in the zhandler() signal handler. The attached patch fixes the problem by getting rid of the global variables, and instead using the signal_block() and signal_unblock() functions. Hopefully I did not break the NO_SIGNAL_BLOCKING, SYSV_SIGNALS and BSD_SIGNALS cases. Cheers. -- Guillaume