Quoting Arun M (arunmahadevai...@gmail.com):
> I guess the unshare and shell does not belong to the same process group. I
> am able to reproduce with the following code.
> 
> cat > pgrp.c <<EOF
> #include <stdio.h>
> #include <signal.h>
> #include <unistd.h>
> #include <alloca.h>
> #include <sched.h>
> #include <sys/types.h>
> #include <sys/wait.h>
> 
> 
> void handle_usr1()
> {
> printf("PID = %d, got usr1\n", getpid());
> }
> 
> int do_child(void *a)
> {
> printf("Child pgrp = %d\n",getpgrp());
> sleep(10);
> kill(0, SIGUSR1);
> return 0;
> }
> 
> int main()
> {
> pid_t pid;
> int status;
> long stack_size = sysconf(_SC_PAGESIZE);
> void *stack = alloca(stack_size);
> 
> signal(SIGUSR1, handle_usr1);
> 
> if ( (pid = clone(do_child, stack + stack_size, CLONE_NEWPID, NULL)) == -1)
> {
> perror("clone");
> return -1;
> }
> 
> printf("Parent pgrp = %d\n",getpgrp());
> 
> waitpid(pid, &status, __WCLONE);
> 
> return 0;
> }
> EOF
> 
> $ gcc pgrp.c -o pgrp
> $ sudo ./pgrp
> Parent pgrp = 21135
> Child pgrp = 0
> PID = 1, got usr1
> PID = 21136, got usr1
> User defined signal 1
> 
> ----
> 
> Though the child pgrp is 0 in child, outside the namespace both the parent
> and child seem to be having the same pgrp id and hence the signal is
> delivered to the parent as well.
> 
> Thanks,
> Arun

Yup, fascinating.

I think this means we may want to do a setsid() or setpgrp() in
src/lxc/start:lxc_start().

-serge

------------------------------------------------------------------------------
Better than sec? Nothing is better than sec when it comes to
monitoring Big Data applications. Try Boundary one-second 
resolution app monitoring today. Free.
http://p.sf.net/sfu/Boundary-dev2dev
_______________________________________________
Lxc-users mailing list
Lxc-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/lxc-users

Reply via email to