#include #include #include #define MCL_FOREVER 4 int main(int argc, char *argv[], char *envp[]) { int rc; int c, do_fork = 0; while ((c = getopt(argc, argv, "f")) != -1) { switch(c) { case 'f': do_fork = 1; break; default: printf("usage:\t%s [-f] program_to_exec\n", argv[0]); } } argv += optind; rc = mlockall(MCL_FUTURE|MCL_FOREVER); if (rc == -1) perror("mlockall"); if (do_fork) { int pid = fork(); if (pid > 0) exit(0); else if (pid < 0) { perror("fork"); exit(1); } } execve(argv[0], argv, envp); perror("execve"); exit(1); }