Asynchronous shell commands
Alternatively, after you got the program running, you can hit Ctrl-Z which stops your program and then type
bg
which puts your last stopped program in the background. (Useful if your started something without '&' and still want it in the backgroung without restarting it)
nohup cmd
doesn't hangup when you close the terminal. output by default goes to nohup.out
You can combine this with backgrounding,
nohup cmd &
and get rid of the output,
nohup cmd > /dev/null 2>&1 &
you can also disown
a command. type cmd
, Ctrl-Z
, bg
, disown
You can just run the script in the background:
$ myscript &
Note that this is different from putting the &
inside your script, which probably won't do what you want.
Everyone just forgot disown
. So here is a summary:
&
puts the job in the background.- Makes it block on attempting to read input, and
- Makes the shell not wait for its completion.
disown
removes the process from the shell's job control, but it still leaves it connected to the terminal.- One of the results is that the shell won't send it a
SIGHUP
(If the shell receives aSIGHUP
, it also sends aSIGHUP
to the process, which normally causes the process to terminate). - And obviously, it can only be applied to background jobs(because you cannot enter it when a foreground job is running).
- One of the results is that the shell won't send it a
nohup
disconnects the process from the terminal, redirects its output tonohup.out
and shields it fromSIGHUP
.- The process won't receive any sent
SIGHUP
. - Its completely independent from job control and could in principle be used also for foreground jobs(although that's not very useful).
- Usually used with
&
(as a background job).
- The process won't receive any sent