Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 10 Aug 2013 17:12:48 +0200
From:      =?iso-8859-2?Q?Edward_Tomasz_Napiera=B3a?= <trasz@FreeBSD.org>
To:        Jilles Tjoelker <jilles@stack.nl>
Cc:        freebsd-arch@freebsd.org
Subject:   Re: Reliable process tracking
Message-ID:  <E8740AE9-E4D9-47BF-A1D8-7A49309FA4D3@FreeBSD.org>
In-Reply-To: <20130810103036.GA40636@stack.nl>
References:  <20130804134658.GC35080@stack.nl> <CDFF8851-0883-4D27-851A-36A9585499E6@FreeBSD.org> <20130807201934.GA4918@stack.nl> <87717220-8094-49BE-BF04-010D9788ABD3@FreeBSD.org> <20130810103036.GA40636@stack.nl>

next in thread | previous in thread | raw e-mail | index | archive | help

Wiadomość napisana przez Jilles Tjoelker <jilles@stack.nl> w dniu 10 sie 2013, o godz. 12:30:
> On Fri, Aug 09, 2013 at 10:42:09AM +0200, Edward Tomasz Napierała wrote:
>> Wiadomość napisana przez Jilles Tjoelker <jilles@stack.nl> w dniu 7 sie 2013, o godz. 22:19:
>>> On Mon, Aug 05, 2013 at 01:13:10PM +0200, Edward Tomasz Napierała wrote:
>>>> Wiadomość napisana przez Jilles Tjoelker <jilles@stack.nl> 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.
> 
>> Indeed.  I'll try to figure out something.
> 
>> FWIW, I've just committed a patch that adds "-c" flag to pkill.
> 
> On another note, init(8) does not set the kernel login class for /etc/rc
> to daemon as might be expected from the /etc/login.conf entry used. I
> use this patch:
> 
> Index: sbin/init/init.c
> ===================================================================
> --- sbin/init/init.c	(revision 253911)
> +++ sbin/init/init.c	(working copy)
> @@ -1729,7 +1729,8 @@
> 	login_cap_t *lc;
> 	if ((lc = login_getclassbyname(cname, NULL)) != NULL) {
> 		setusercontext(lc, (struct passwd*)NULL, 0,
> -		    LOGIN_SETPRIORITY | LOGIN_SETRESOURCES);
> +		    LOGIN_SETPRIORITY | LOGIN_SETRESOURCES |
> +		    LOGIN_SETLOGINCLASS);
> 		login_close(lc);
> 	}
> }
> 
> Should I commit this?

I think so.  You also might want to add  LOGIN_SETCPUMASK there.




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?E8740AE9-E4D9-47BF-A1D8-7A49309FA4D3>