17

Is it possible to launch a command or Bash script exit terminal and NOT interrupt command?

My solution was to run cron at a specific time of day, but I'm sure there is something easier.

40

To avoid exit signals propagating to child processes of the terminal and shell, run the command with nohup, i.e.:

nohup cmd &
  • 1
    This is the correct answer. Without nohup, the started process is still considered a "child" of the terminal process and thus terminated if the terminal is closed. – Izzy Jul 13 '12 at 13:04
  • 3
    cmd & disown works too, since the & is treated like a ; command separator. The disown command removes the connection between the bash shell session and the backgrounded command. – lornix Jul 14 '12 at 20:34
  • 2
    zsh has a shorthand for this: cmd &|. – Thor Oct 26 '12 at 9:24
  • For this to work, I had to change a preference in Terminal.app. Under Profiles, select your active profile, then Shell>When the shell exits>Close if the shell exited cleanly – antoine May 9 '17 at 1:12
5

Using screen:

screen -S <session name> -d -m <your command>

after that you can quit the terminal, also you can reattach to it by:

screen -r <session name>

More info: reference

4

If you want to run a specific command or file every second or so in the background after exiting the terminal you could try this easy little thing;

nohup watch -n5 'bash script.sh' &

That would run scipt.sh every 5 seconds.

  • 1
    "nohup" is already covered by the accepted answer. And I'm pretty sure the asker mentioned cron because they were using it to say "Run this command a few seconds in the future", not to run it periodically. – David Richerby Aug 6 '15 at 21:01
  • 1
    My answer don't make things worse. Do see the point of down vote. Neural would be sufficient. – jamietelin Aug 6 '15 at 21:41
3

Put a "&" character after your command.

e.g:

/home/your/script.sh &
  • 7
    in this case, when the terminal is closed, so is the process started by /home/your/script.sh -- as it was not detached from its "parent", but just "backgrounded". Use nohup to detach it for real. – Izzy Jul 13 '12 at 13:05
  • My bad, I didn't knew about that, but when I tested on my Debian, the command kept executing after closing the shell which launched it :/ – Flinth Jul 13 '12 at 14:03
  • 1
    I'm not sure where exactly the backgrounded process is attached to and when. But if you e.g. log in to a remote machine, it is definitely stopped as soon as you log out (except if it daemonized itself). So to be 100% sure, you rather use nohup -- which also logs all (now invisible) output into a file called nohup.out located in the directory you started the command from. – Izzy Jul 13 '12 at 14:10
  • Okay, well thank you for your explanations ^^ – Flinth Jul 13 '12 at 14:18
  • This answer might work ok when combined with the jobs command. Quite often i want to be able to get back to the shell process after backgrounding it. – djangofan Dec 7 '18 at 19:17

Your Answer

By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.