Changeset 2725 in MondoRescue for branches/2.2.9/mindi-busybox/miscutils/setsid.c
- Timestamp:
- Feb 25, 2011, 9:26:54 PM (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2.2.9/mindi-busybox/miscutils/setsid.c
r1765 r2725 5 5 * In the public domain. 6 6 * 7 * 1999-02-22 Arkadiusz Mi ¶kiewicz <misiek@pld.ORG.PL>7 * 1999-02-22 Arkadiusz Mickiewicz <misiek@pld.ORG.PL> 8 8 * - added Native Language Support 9 9 * … … 17 17 #include "libbb.h" 18 18 19 int setsid_main(int argc, char **argv) ;20 int setsid_main(int argc , char **argv)19 int setsid_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; 20 int setsid_main(int argc UNUSED_PARAM, char **argv) 21 21 { 22 if ( argc < 2)22 if (!argv[1]) 23 23 bb_show_usage(); 24 24 25 /* Comment why is this necessary? */ 26 if (getpgrp() == getpid()) 27 forkexit_or_rexec(argv); 25 /* setsid() is allowed only when we are not a process group leader. 26 * Otherwise our PID serves as PGID of some existing process group 27 * and cannot be used as PGID of a new process group. */ 28 if (setsid() < 0) { 29 pid_t pid = fork_or_rexec(argv); 30 if (pid != 0) { 31 /* parent */ 32 /* TODO: 33 * we can waitpid(pid, &status, 0) and then even 34 * emulate exitcode, making the behavior consistent 35 * in both forked and non forked cases. 36 * However, the code is larger and upstream 37 * does not do such trick. 38 */ 39 exit(EXIT_SUCCESS); 40 } 28 41 29 setsid(); /* no error possible */ 42 /* child */ 43 /* now there should be no error: */ 44 setsid(); 45 } 30 46 31 BB_EXECVP(argv[1], argv + 1);32 bb_perror_msg_and_die("%s", argv[1]);47 argv++; 48 BB_EXECVP_or_die(argv); 33 49 }
Note:
See TracChangeset
for help on using the changeset viewer.