Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 10 Jul 1995 12:55:22 +0900
From:      Toshihiro Kanda <candy@fct.kgc.co.jp>
To:        freebsd-questions@freebsd.org
Subject:   How can I block a signal?
Message-ID:  <199507100355.MAA25071@xxx.fct.kgc.co.jp>

next in thread | raw e-mail | index | archive | help
  Hi.  Someone please teach me how to block a signal.  My system is:

>$uname -mrs
>FreeBSD 2.0-RELEASE i386

  The friendly manual sigprocmask(2) says "Signals are blocked if they
are members of the current signal mask set."  But it doesn't seem to
block.  I tested the following program.
---8<------8<------8<------8<------8<---
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
void onintr(int x) { write(2, "!", 1); }
int main(void)
{
	sigset_t mask = sigmask(SIGUSR1);
	signal(SIGUSR1, onintr);
	raise(SIGUSR1);
	sigprocmask(SIG_BLOCK, &mask, NULL);
	write(2, "block\n", 6);
	raise(SIGUSR1);
	mask = sigmask(SIGUSR1);
	sigprocmask(SIG_UNBLOCK, &mask, NULL);
	write(2, "unblock\n", 8);
	return 0;
}
---8<------8<------8<------8<------8<---
  I expected it output:
>!block
>unblock
>!
  But it output:
>!block
>!unblock

  Why?  Is this correct and am I misunderstanding?  If so, how can I block
a signal?

Thank you.

candy@fct.kgc.co.jp (Toshihiro Kanda)



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199507100355.MAA25071>