Linux nohup and exec
From Ever changing code
exec do different things.
execreplaces the shell with another program. Using
execin a simple background job isn't useful:
exec myprogram; more stuffreplaces the shell with
myprogramand so doesn't run
more stuff, unlike
myprogram; more stuffwhich runs more stuff when
exec myprogram & more stuffstarts
myprogramin the background and then runs more stuff, just like
myprogram & more stuff.
nohupruns the specificed program with the SIGHUP signal ignored. When a terminal is closed, the kernel sends SIGHUP to the controlling process in that terminal (i.e. the shell). The shell in turn sends SIGHUP to all the jobs running in the background. Running a job with
nohupprevents it from being killed in this way if the terminal dies (which happens e.g. if you were logged in remotely and the connection drops, or if you close your terminal emulator).
nohupalso redirects the program's output to the file
nohup.out. This avoids the program dying because it isn't able to write to its output or error output. Note that nohup doesn't redirect the input. To fully disconnect a program from the terminal where you launched it, use
nohup myprogram </dev/null >myprogram.log 2>&1 &
Exec explanation 2
exec firefox, the shell is no longer running: it has been replaced by
firefox. You can think of
exec as combining exiting a program and starting a new one, but keeping the same process ID. The terminal keeps running because nothing told it to stop. When you later exit Firefox, the firefox process terminates. The terminal notices that its child process has exited and so it exits in turn.
exec &- executes a process as a background process so you may continue using the same terminal for other jobs.
nohup- avoids all SIGHUP(terminate signal) and continues execution even if you terminal is closed.
exec- process dies when a SIGHUP is received, but nohup process continues.
- Why use “nohup &” rather than “exec &” unix.stackexchange.com