Messages in this thread |  | | Subject | More SIGCHLD musings | Date | Tue, 25 Jun 1996 00:17:28 +0200 | From | Michiel Boland <> |
| |
Hello again.
First of all, apologies to Mr. SIGCHLD. He's been getting the wrong end of the stick lately. Let's hope things get better for him soon.
Now, here's the phenomenon.
When I run the included program on SunOS 4.1.3. and Solaris 2.5, it prints "sig" as expected. But when I run it on Linux 2.0.0, or indeed Linux 1.2.13, nothing happens.
What's going on here? Is the SIGCHLD signal somehow discarded when waitpid is called? What does POSIX have to say about this?
-------------------------------- #include <stdio.h> #include <sys/types.h> #include <sys/wait.h> #include <unistd.h> #include <signal.h> #include <errno.h>
void sighandler() { write(STDERR_FILENO, "sig\n", 4); return; }
int main(void) { sigset_t set, oset; struct sigaction act; pid_t pid;
sigemptyset(&set); sigaddset(&set, SIGCHLD); sigprocmask(SIG_BLOCK, &set, &oset); act.sa_handler = sighandler; sigemptyset(&act.sa_mask); act.sa_flags = 0; sigaction(SIGCHLD, &act, 0);
switch (pid = fork()) { case -1: perror("fork"); return 1; case 0: _exit(0); break; default: while (waitpid(pid, 0, 0) == -1) { if (errno != EINTR) break; } }
sigprocmask(SIG_SETMASK, &oset, 0); return 0; } -- Michiel Boland <boland@sci.kun.nl> University of Nijmegen The Netherlands
|  |