Rob Landley | 7aa651a | 2012-11-13 17:14:08 -0600 | [diff] [blame] | 1 | /* nohup.c - run commandline with SIGHUP blocked. |
Rob Landley | 1418fa7 | 2011-11-20 21:13:47 -0600 | [diff] [blame] | 2 | * |
| 3 | * Copyright 2011 Rob Landley <rob@landley.net> |
| 4 | * |
| 5 | * See http://opengroup.org/onlinepubs/9699919799/utilities/nohup.html |
| 6 | |
Rob Landley | 0cf6a2d | 2014-06-11 22:43:54 -0500 | [diff] [blame] | 7 | USE_NOHUP(NEWTOY(nohup, "<1^", TOYFLAG_USR|TOYFLAG_BIN)) |
Rob Landley | 1418fa7 | 2011-11-20 21:13:47 -0600 | [diff] [blame] | 8 | |
| 9 | config NOHUP |
Rob Landley | 7aa651a | 2012-11-13 17:14:08 -0600 | [diff] [blame] | 10 | bool "nohup" |
| 11 | default y |
| 12 | help |
| 13 | usage: nohup COMMAND [ARGS...] |
Rob Landley | 1418fa7 | 2011-11-20 21:13:47 -0600 | [diff] [blame] | 14 | |
Rob Landley | 7aa651a | 2012-11-13 17:14:08 -0600 | [diff] [blame] | 15 | Run a command that survives the end of its terminal. |
Rob Landley | 0cf6a2d | 2014-06-11 22:43:54 -0500 | [diff] [blame] | 16 | |
| 17 | Redirect tty on stdin to /dev/null, tty on stdout to "nohup.out". |
Rob Landley | 1418fa7 | 2011-11-20 21:13:47 -0600 | [diff] [blame] | 18 | */ |
| 19 | |
| 20 | #include "toys.h" |
| 21 | |
| 22 | void nohup_main(void) |
| 23 | { |
Rob Landley | c776bde | 2015-03-10 11:07:28 -0500 | [diff] [blame] | 24 | xsignal(SIGHUP, SIG_IGN); |
Rob Landley | 7aa651a | 2012-11-13 17:14:08 -0600 | [diff] [blame] | 25 | if (isatty(1)) { |
| 26 | close(1); |
| 27 | if (-1 == open("nohup.out", O_CREAT|O_APPEND|O_WRONLY, |
| 28 | S_IRUSR|S_IWUSR )) |
| 29 | { |
| 30 | char *temp = getenv("HOME"); |
Rob Landley | 21f3c8d | 2014-10-20 19:56:05 -0500 | [diff] [blame] | 31 | |
Rob Landley | 59d85e2 | 2014-01-16 09:26:50 -0600 | [diff] [blame] | 32 | temp = xmprintf("%s/%s", temp ? temp : "", "nohup.out"); |
Rob Landley | 0cf6a2d | 2014-06-11 22:43:54 -0500 | [diff] [blame] | 33 | xcreate(temp, O_CREAT|O_APPEND|O_WRONLY, 0600); |
Rob Landley | 21f3c8d | 2014-10-20 19:56:05 -0500 | [diff] [blame] | 34 | free(temp); |
Rob Landley | 7aa651a | 2012-11-13 17:14:08 -0600 | [diff] [blame] | 35 | } |
| 36 | } |
| 37 | if (isatty(0)) { |
| 38 | close(0); |
| 39 | open("/dev/null", O_RDONLY); |
| 40 | } |
Rob Landley | c004520 | 2015-02-07 16:17:44 -0600 | [diff] [blame] | 41 | xexec(toys.optargs); |
Rob Landley | 1418fa7 | 2011-11-20 21:13:47 -0600 | [diff] [blame] | 42 | } |