[lxc-devel] [PATCH 0/5] Signal stuff v2 and some documentation
Daniel Lezcano
daniel.lezcano at free.fr
Thu Jul 15 20:58:02 UTC 2010
On 07/15/2010 10:07 PM, Ferenc Wagner wrote:
> Daniel Lezcano<daniel.lezcano at free.fr> writes:
>
>
>> On 06/09/2010 07:56 PM, Ferenc Wagner wrote:
>>
>>
>>> here are basically the same patches, with some obvious errors corrected
>>> and some unrelated documentation added. It actually survived some
>>> targeted testing in the past days and seems to behave as expected, ie.
>>>
>>> # lxc-start -n s -- sh -c "trap 'echo TERM' TERM; sleep 10"
>>>
>>> can be interrupted by Ctrl-C from the terminal (the sleep process does
>>> not ignore the SIGINT sent to the foreground process group by the OS),
>>> while a
>>>
>>> # pkill lxc-start
>>>
>>> does not terminate the sleep as the SIGTERM gets forwarded to the shell
>>> only, which reports it after the sleep expires. This forwarding
>>> mechanism makes it possible to plug lxc into our batch queueing system.
>>>
>>>
>> is it your last version or can I investigate with this patchset ?
>>
> Yes, this is the version I've been using since I posted it. I haven't
> ported it to latest git, but it shouldn't be hard. It seems to do what
> I intended, but obviously interferes with the console handling, but that
> should be rethought anyway, as I see it.
Ok, thanks. I will take the 2 first patches, so signal forwarding is
done but without [tc]setpgrp for the moment.
I have a couple a patches on top of yours where when lxc-init receives a
SIGTERM, it does like the usual 'init' process by sending a kill(-1,
SIGTERM) followed by a kill(-1, SIGKILL) if all the processes do not
exit after a small amount of time.
I just figured out, in your use case, you are using 'lxc-start -n foo
<prog>'. You are getting ride of the child reaping (the kernel reparents
orphan processes to the container's init). The purpose of lxc-init is to
reap childs, mount /proc, /dev/shm, forward signals to process 2 and
support daemons. Maybe you already noticed that, but maybe you should
use the 'lxc-execute -n foo <prog>' (which spawns lxc-init). In this
case, it would be more convenient to do [tc]setpgrp in lxc-init, so we
solve the problem with the console.
> Basically, I feel like the container console from the user space PoV should be an alias for a
> terminal device, just like on a real system. /dev/console isn't
> virtualized by the kernel, so it shouldn't be accessible from a
> container, although bind mounting it to some tty is an option in case
> some program uses it explicitly.
That was the first implementation but the '/sbin/init' process calls
TIOCSCTTY, borrowing the tty to the current terminal.
> In any case, the "console" presented
> by lxc-start should always be detachable, preferable even detached by
> default.
>
Yep, I will send a matrix with a lxc-execute vs lxc-start vs start()
common function vs console and hopefully we can find a nice way to fix
this mess.
Thanks Ferenc,
-- Daniel
More information about the lxc-devel
mailing list