-static void spawn_namespace(const char *path, int argc, char **argv)
-{
- char *dir = get_current_dir_name();
-
- uloop_init();
- if (chdir(path)) {
- ERROR("failed to chdir() into the jail\n");
- return;
- }
- namespace_process.pid = clone(spawn_child,
- child_stack + STACK_SIZE,
- CLONE_NEWUTS | CLONE_NEWPID | CLONE_NEWNS | SIGCHLD, argv);
-
- if (namespace_process.pid != -1) {
- if (chdir(dir))
- ERROR("failed to chdir() out of the jail\n");
- free(dir);
- uloop_process_add(&namespace_process);
- uloop_run();
- uloop_done();
- if (namespace_running) {
- kill(namespace_process.pid, SIGTERM);
- waitpid(namespace_process.pid, NULL, 0);
- }
- } else {
- ERROR("failed to spawn namespace: %s\n", strerror(errno));
- }
-}
-