Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 09 Jul 1996 20:43:34 +0100
From:      "Gary Palmer" <gpalmer@FreeBSD.ORG>
To:        Brandon Gillespie <brandon@tombstone.sunrem.com>
Cc:        freebsd-hackers@FreeBSD.ORG
Subject:   Re: handling SIGCHLD with multiple children 
Message-ID:  <28681.836941414@palmer.demon.co.uk>
In-Reply-To: Your message of "Tue, 09 Jul 1996 13:21:06 MDT." <Pine.BSF.3.91.960709131511.4876B-100000@tombstone.sunrem.com> 

next in thread | previous in thread | raw e-mail | index | archive | help
Brandon Gillespie wrote in message ID
<Pine.BSF.3.91.960709131511.4876B-100000@tombstone.sunrem.com>:
> The server is a object oriented database driver (with its own interpreted
> language), and the child is handling a backup pseudo-asyncrynously. 
> Basically it syncronizes its database on disk, sets it read-only and forks
> a child which begins the actual backup.  When the child is finished
> copying the server knows to go back to a read/write db when it receives
> the signal.  However, there is also the possibility of other children with
> different purposes being forked as well.  Furthermore, the server is
> handling network connections, and does NOT want to block while it backups,
> due to the time involved with a sizeable database.  I suppose I could just
> use one of the SIGUSR* signals.. 

Why not go with my second suggestion? You can trap the SIGCHLD, and in
the handler do something like:

void
sig_child(int dummy)
{
	int status;

	if (waitpid(backup_pid, &status, WNOHANG) == backup_pid)
		db_rw = TRUE;
}

This is rough code, written on the fly, and I suggest you read the
wait() manpage for more details. 

Gary
--
Gary Palmer                                          FreeBSD Core Team Member
FreeBSD: Turning PC's into workstations. See http://www.FreeBSD.ORG/ for info



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