Nohup
External
- nohup on wikipedia http://en.wikipedia.org/wiki/Nohup
Internal
Overview
nohup is a POSIX command to ignore the HUP (hangup) signal. The HUP signal is, by convention, the way a terminal warns dependent processes of logout.
nohup command &
stdout and stderr output that would normally go to the terminal goes to a file called ./nohup.out.
The name of the output files can be modified by redirecting the output streams inside the nohup command:
nohup command > my-stdout-file.out 2> my-stdout-file.out &
This command won't produce the default nohup.out file, but two my-stdout-file.out and my-stdout-file.out files.
Note that nohupping backgrounded jobs is typically used to avoid terminating them when logging off from a remote SSH session.
A different issue that often arises in this situation is that ssh is refusing to log off ("hangs"), since it refuses to lose any data from/to the background job(s).
This problem can be overcome by redirecting all three I/O streams:
nohup ./myprogram > foo.out 2> foo.err < /dev/null &
Solution Used to Background gld Remotely
... if ${background}; then nohup ${command} 1>./gld.log 2>&1 < /dev/null & pid=$! echo "gld launched in background (pid ${pid}), use gld stop|status to interact with it" sleep 1 else ... fi