#define _GNU_SOURCE /* See feature_test_macros(7) */ #include #include /* For SYS_xxx definitions */ #include #include #include #include #include #include void do_clone_exec(int flags, char *cmd, char *argv[]) { int ret = 0; pid_t pid; int status; if ((pid = syscall(SYS_clone, flags, NULL))) { /* parent */ if (ret<0) { perror("clone"); exit(2); } else { waitpid(-1, &status, __WCLONE); exit(status); } } ret = execvp(cmd, argv); if (ret<0) perror("execvp"); exit(1); } int main(int argc, char *argv[]) { do_clone_exec(CLONE_NEWUSER, argv[1], argv+1); exit(0); }