src\lxc\lxc_start.c
int main(int argc, char *argv[])
{
int err = -1;
struct lxc_conf *conf;
char *const *args;
char *rcfile = NULL;
char *const default_args[] = {
"/sbin/init",
'\0',
};
default_args[0] = "/sbin/init"
if (!my_args.argc)
args = default_args;
args[0] = "/sbin/init"
err = lxc_start(my_args.name, args, conf, my_args.lxcpath);
int lxc_start(const char *name, char *const argv[], struct lxc_conf *conf,
const char *lxcpath)
{ argv[0] = "/sbin/init"
start_arg.argv[0] = "/sbin/init"
struct start_args start_arg = {
.argv = argv,
};
if (lxc_check_inherited(conf, -1))
return -1;
conf->need_utmp_watch = 1;
return __lxc_start(name, conf, &start_ops, &start_arg, lxcpath);
}
int __lxc_start(const char *name, struct lxc_conf *conf,
struct lxc_operations* ops, void *data, const char *lxcpath)
{
handler->data = data;
err = lxc_spawn(handler);
data ->argv[0] = "/sbin/init"
handler->data ->argv[0] = "/sbin/init"
int lxc_spawn(struct lxc_handler *handler)
{
handler->pid = lxc_clone(do_start, handler, handler->clone_flags);
pid_t lxc_clone(int (*fn)(void *), void *arg, int flags)
{
struct clone_arg clone_arg = {
.fn = fn,
.arg = arg,
};
clone_arg.arg-> data ->argv[0] = "/sbin/init"
.fn = do_start
ret = clone(do_clone, stack + stack_size, flags | SIGCHLD, &clone_arg);
static int do_clone(void *arg)
{
struct clone_arg *clone_arg = arg;
return clone_arg->fn(clone_arg->arg);
do_start(arg); arg-> data ->argv[0] = "/sbin/init"
}
static int do_start(void *data) data -> data ->argv[0] = "/sbin/init"
{
struct lxc_handler *handler = data; handler -> data ->argv[0] = "/sbin/init"
/* after this call, we are in error because this
* ops should not return as it execs */
handler->ops->start(handler, handler->data);
static int execute_start(struct lxc_handler *handler, void* data) data ->argv[0] = "/sbin/init"
{
int j, i = 0;
struct execute_args *my_args = data; my_args ->argv[0] = "/sbin/init"
execvp(argv[0], argv);