Daniel Lezcano <daniel.lezc...@free.fr> writes: > Ferenc Wagner wrote: > >> Daniel Lezcano <daniel.lezc...@free.fr> writes: >> >>> Ferenc Wagner wrote: >>> >>>> I'd like to use lxc-start as a wrapper, invisible to the parent and >>>> the (jailed) child. Of course I could hack around this by not >>>> exec-ing lxc-start but keeping the shell around, trap all signals and >>>> lxc-killing them forward. But it's kind of ugly in my opinion. >>> >>> Ok, got it. I think that makes sense to forward the signals, >>> especially for job management. What signals do you want to forward? >> >> Basically all of them. I couldn't find a definitive list of signals >> used for job control in SGE, but the following is probably a good >> approximation: SIGTTOU, SIGTTIN, SIGUSR1, SIGUSR2, SIGCONT, SIGWINCH and >> SIGTSTP. > > Yes, that could be a good starting point. I was wondering about > SIGSTOP being sent to lxc-start which is not forwardable of course, is > it a problem ?
I suppose not, SIGSTOP and SIGKILL are impossible to use in application- specific ways. On the other hand, SIGXCPU and SIGXFSZ should probably be forwarded, too. Naturally, this business can't be perfected, but a "good enough" solution could still be valuable. >> Looking at the source, the SIGCHLD mechanism could be >> mimicked, but LXC_TTY_ADD_HANDLER may get in the way. > > We should remove LXC_TTY_ADD_HANDLER and do everything in the signal > handler of SIGCHLD by extending the handler. I have a pending fix > changing a bit the signal handler function. Could you please send along your pending fix? I'd like to experiment with signal forwarding, but without stomping on that. I noticed something strange: # lxc-start -n jail -s lxc.mount.entry="/ /tmp/jail none bind 0 0" -s lxc.rootfs=/tmp/jail -s lxc.pivotdir=/mnt /bin/sleep 1000 (in another terminal) # lxc-ps --lxc CONTAINER PID TTY TIME CMD jail 4173 pts/1 00:00:00 sleep # kill 4173 (this does not kill the sleep!) # strace -p 4173 Process 4173 attached - interrupt to quit restart_syscall(<... resuming interrupted call ...> = ? ERESTART_RESTARTBLOCK (To be restarted) --- SIGTERM (Terminated) @ 0 (0) --- Process 4173 detached # lxc-ps --lxc CONTAINER PID TTY TIME CMD jail 4173 pts/1 00:00:00 sleep # fgrep -i sig /proc/4173/status SigQ: 1/16382 SigPnd: 0000000000000000 SigBlk: 0000000000000000 SigIgn: 0000000000000000 SigCgt: 0000000000000000 # kill -9 4173 That is, the jailed sleep process could be killed by SIGKILL only, even though (according to strace) SIGTERM was delivered and it isn't handled specially. Why does this happen? >> I'm also worried about signals sent to the whole process group: they >> may be impossible to distinguish from the targeted signals and thus >> can't propagate correctly. > > Good point. Maybe we can setpgrp the first process of the container? We've got three options: A) do nothing, as now B) forward to our child C) forward to our child's process group The signal could arrive because it was sent to 1) the PID of lxc-start 2) the process group of lxc-start If we don't put the first process of the container into a new process group (as now), this is what happens: A B C 1 swallowed OK others also killed 2 OK child gets extra everybody gets extra If we put the first process of the container into a new process group: A B C 1 swallowed OK others also killed 2 swallowed only the child killed OK Neither is a clear winner, although the latter is somewhat more symmetrical. I'm not sure about wanting all this configurable... -- Thanks, Feri. ------------------------------------------------------------------------------ _______________________________________________ Lxc-users mailing list Lxc-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/lxc-users