• Deyan Doychev's avatar
    criu: Add exec-cmd option (v3) · 69a6bf44
    Deyan Doychev authored
    The --exec-cmd option specifies a command that will be execvp()-ed on successful
    restore. This way the command specified here will become the parent process of
    the restored process tree.
    
    Waiting for the restored processes to finish is responsibility of this command.
    
    All service FDs are closed before we call execvp(). Standad output and error of
    the command are redirected to the log file when we are restoring through the RPC
    service.
    
    This option will be used when restoring LinuX Containers and it seems helpful
    for perf or other use cases when restored processes must be supervised by a
    parent.
    
    Two directions were researched in order to integrate CRIU and LXC:
    
    1. We tell to CRIU, that after restoring container is should execve()
       lxc properly explaining to it that there's a new container hanging
       around.
    
    2. We make LXC set himself as child subreaper, then fork() criu and ask
       it to detach (-d) from restore container afterwards. Being a subreaper,
       it should get the container's init into his child list after it.
    
    The main reason for choosing the first option is that the second one can't work
    with the RPC service. If we call restore via the service then criu service will
    be the top-most task in the hierarchy and will not be able to reparent the
    restore trees to any other task in the system. Calling execve from service
    worker sub-task (and daemonizing it) should solve this.
    Signed-off-by: 's avatarDeyan Doychev <deyandoichev@gmail.com>
    Signed-off-by: 's avatarPavel Emelyanov <xemul@parallels.com>
    69a6bf44
cr-service.c 13.4 KB