#include #include #include #include #include extern const char *__progname; void my_error_print_progname( void ) { fprintf( stderr, "%s: ", __progname ); } int main( int ac, char *const *av ) { error_print_progname = my_error_print_progname; if ( ac < 2 ) error( 1, 0, "usage: %s program [arguments]", __progname ); else { int pid = fork(); if ( pid < 0 ) error( 1, errno, "fork" ); else if ( pid ) return 0; if ( setsid() < 0 ) error( 1, errno, "setsid" ); execvp( av[1], av+1 ); error( 1, errno, "%s", av[1] ); } return 0; }