sbase

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README | LICENSE

setsid.c (618B)


      1 /* See LICENSE file for copyright and license details. */
      2 #include <errno.h>
      3 #include <unistd.h>
      4 
      5 #include "util.h"
      6 
      7 static void
      8 usage(void)
      9 {
     10 	eprintf("usage: %s cmd [arg ...]\n", argv0);
     11 }
     12 
     13 int
     14 main(int argc, char *argv[])
     15 {
     16 	int savederrno;
     17 
     18 	argv0 = *argv, argv0 ? (argc--, argv++) : (void *)0;
     19 
     20 	if (!argc)
     21 		usage();
     22 
     23 	if (getpgrp() == getpid()) {
     24 		switch (fork()) {
     25 		case -1:
     26 			eprintf("fork:");
     27 		case 0:
     28 			break;
     29 		default:
     30 			return 0;
     31 		}
     32 	}
     33 	if (setsid() < 0)
     34 		eprintf("setsid:");
     35 	execvp(argv[0], argv);
     36 	savederrno = errno;
     37 	weprintf("execvp %s:", argv[0]);
     38 
     39 	_exit(126 + (savederrno == ENOENT));
     40 }