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 &

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