Running process in background after closing terminal Running process in background after closing terminal bash bash

Running process in background after closing terminal


Starting a subshell and running the nohup command from there seems to avoid having Terminal kill it off when exiting.

bash -c "nohup sh -c 'while true; do date; sleep 1; done' &"

Not very elegant, but works for me.


This is already answered, but the Screen utility seems like it would be perfect for this.

  • man screen To view the documentation for screen.

  • www.ss64.com/osx/screen.html to view slightly more user friendly documentation.

  • Start screen with a name and a script to run:

    screen -S GWatch Scripts/gw_watch.shThis starts a screen session named 'GWatch' and executes gw_watch.sh.

When a screen session is started, one has the option of disconnecting from it. This will leave the screen active in the background. It will remain active even after the user logs out (permissions notwithstanding).

Here is an example:

  1. Create a shell script called 'screencheck.sh'
  2. Put the following into the file (I often use textwrangler and / or nano).

    #!/bin/bashcount=0while [ $count -lt $1 ] ; do    echo "Count: $count of $1. Pausing for five seconds."   sleep 5s   ((count++))done
  3. Open two terminal windows.

  4. In one of the terminal windows type screen -ls. You should see a message about no sockets being found.
  5. In the second terminal window, change directory to where the script was saved.
  6. In the second terminal window type screen -S ScreenCheck screencheck.sh 500. screencheck.sh has to be executable.
  7. In the second terminal window, you should see:

    Count: 0 of 500. Pausing for five seconds.Count: 1 of 500. Pausing for five seconds.Count: 2 of 500. Pausing for five seconds....
  8. Disconnect from the screen session by typing ctrl-a d. That's control + a, release both, d key.
  9. You should see [detached].
  10. In the first terminal, type screen -ls.
  11. You should see something like:

    FCH000: ~: screen -lsThere is a screen on:   1593.ScreenCheck (Detached)1 Socket in /var/folders/pk/l6b5fhkj6mxfpfh8mtgmstg40000gn/T/.screen.
  12. Reattach to the screen session using screen -R ScreenCheck.

  13. You should see something like:

    Count: 226 of 500. Pausing for five seconds.Count: 227 of 500. Pausing for five seconds.Count: 228 of 500. Pausing for five seconds.Count: 229 of 500. Pausing for five seconds....

To see if it is running after logout, log out and ssh to the computer from another computer. screen -ls should show the same screen session as before.

I hope this helps.