From owner-freebsd-arch@FreeBSD.ORG Wed Aug 7 20:19:52 2013 Return-Path: Delivered-To: freebsd-arch@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 04288D00; Wed, 7 Aug 2013 20:19:52 +0000 (UTC) (envelope-from jilles@stack.nl) Received: from mx1.stack.nl (unknown [IPv6:2001:610:1108:5012::107]) (using TLSv1 with cipher ADH-CAMELLIA256-SHA (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id BDEA02696; Wed, 7 Aug 2013 20:19:51 +0000 (UTC) Received: from snail.stack.nl (snail.stack.nl [IPv6:2001:610:1108:5010::131]) by mx1.stack.nl (Postfix) with ESMTP id D65671203E0; Wed, 7 Aug 2013 22:19:34 +0200 (CEST) Received: by snail.stack.nl (Postfix, from userid 1677) id BF79B28494; Wed, 7 Aug 2013 22:19:34 +0200 (CEST) Date: Wed, 7 Aug 2013 22:19:34 +0200 From: Jilles Tjoelker To: Edward Tomasz =?utf-8?Q?Napiera=C5=82a?= Subject: Re: Reliable process tracking Message-ID: <20130807201934.GA4918@stack.nl> References: <20130804134658.GC35080@stack.nl> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: User-Agent: Mutt/1.5.21 (2010-09-15) Cc: freebsd-arch@freebsd.org X-BeenThere: freebsd-arch@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: Discussion related to FreeBSD architecture List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 07 Aug 2013 20:19:52 -0000 On Mon, Aug 05, 2013 at 01:13:10PM +0200, Edward Tomasz Napierała wrote: > Wiadomość napisana przez Jilles Tjoelker w dniu 4 sie 2013, o godz. 15:46: > > When shutting down a service or requesting status, rc.subr currently > > uses a combination of pidfiles and process names. This is fairly but not > > completely reliable once it is set up correctly (which can take a lot of > > work and possibly patching the daemon to use pidfile(3) from our > > libutil). It is also incapable of killing multiprocess daemons such as > > CGI web servers without cooperation of the daemon. > > I think what is needed here is a facility that marks a process and all > > of its descendants. Removing the mark should be a privileged or at least > > an unusual operation; no unprivileged function specified by POSIX such > > as setsid() should do this. > I've actually thought about that when I added setloginclass(2). It's > trivial to modify rc.subr to use su(8) to set login class for each > service. It should be trivial to modify pkill(1) and killall(1) to > add "-c" option to kill all processes in a given login class. There are some problems with su -c: * It refuses to set a login class name that is not in /etc/login.conf. Given that multiple instances of a service should each have their own kernel login class, it may make sense to allow specifying the login.conf entry separate from the kernel login class. * It always inserts an intermediate process to shut down the PAM session. This is not needed to start a simple daemon but not that harmful apart from performance. > Two caveats: > 1. Login classes, just like UIDs, are global, not per jail. This means when > you want to kill all processees in a login class, you should probably use > "-j" option to limit it to a given jail, e.g. jail 0. True. > 2. I'm not sure if pkill(1) has any special way of handling this, but there is > an obvious race condition between iterating over processes in userland > in pkill(1) and quickly forking processes to kill. Perhaps we should have > some kind of syscall to do it in a race-free way? Yes. -- Jilles Tjoelker