Nohup

From NovaOrdis Knowledge Base
Jump to navigation Jump to search

External

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 &

nohup achieves this behavior by detaching from its session and TTY, so its child processes won't notice the HUP signal sent by the terminal on disconnection. 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