If I quit Terminal.app, do processes that it initiated quit with it?

For the command to continue after closing the Terminal application window, you need to do the following.

  1. Precede the command with nohup. This will allow the command to continue after the Terminal application window is closed. This also allows the command to continue after the quitting the Terminal application.
  2. Redirect standard out and standard error to the same or different files. This gives the output someplace to go, otherwise the default will be use. (See the man page below).
  3. Append a & to the end of the command line. This runs the command in the background, otherwise you will not get a command prompt until the command finishes.

For example, if I wanted to use the find command to search for the file readgpt and print the results to a Terminal application window, I would execute the command given below. Note: Here, I do not care about the error messages, so I redirected standard error to /dev/null.

find / -name readgpt -print 2>/dev/null

Now, if I wanted to close the Terminal application window and view the results later, I would execute the command below.

nohup find / -name readgpt -print >~/Documents/results.txt 2>/dev/null &

After entering the above, you will get a job number in brackets followed by a process number. An example is given below.

[1] 1456

You can get the status of this process by entering the ps command, as shown below.

Marlin:~ davidanderson$ ps 1456
  PID   TT  STAT      TIME COMMAND
 1456 s001  U      0:06.83 find / -name readgpt -print

You can terminate this process by entering the kill command, as shown below.

Marlin:~ davidanderson$ kill 1456
[1]+  Terminated: 15          nohup find / -name readgpt -print > ~/Documents/results.txt 2> /dev/null

Note: If you enter the kill command in a window that differs from one used to create the process, then there probably will be no output.

The man page for the nohup command is given below.

NOHUP(1)                  BSD General Commands Manual                 NOHUP(1)

NAME
     nohup -- invoke a utility immune to hangups

SYNOPSIS
     nohup [--] utility [arguments]

DESCRIPTION
     The nohup utility invokes utility with its arguments and at this
     time sets the signal SIGHUP to be ignored.  If the standard output
     is a terminal, the standard output is appended to the file nohup.out
     in the current directory.  If standard error is a terminal, it is
     directed to the same place as the standard output.

     Some shells may provide a builtin nohup command which is similar or
     identical to this utility.  Consult the builtin(1) manual page.

ENVIRONMENT
     The following variables are utilized by nohup:

     HOME  If the output file nohup.out cannot be created in the current
           directory, the nohup utility uses the directory named by HOME
           to create the file.

     PATH  Used to locate the requested utility if the name contains no
           `/' characters.

EXIT STATUS
     The nohup utility exits with one of the following values:

     126     The utility was found, but could not be invoked.

     127     The utility could not be found or an error occurred in
             nohup.

     Otherwise, the exit status of nohup will be that of utility.

SEE ALSO
     builtin(1), csh(1), signal(3)

STANDARDS
     The nohup utility is expected to be IEEE Std 1003.2 (``POSIX.2'')
     compatible.

BUGS
     Two or more instances of nohup can append to the same file, which
     makes for a confusing output.

BSD                              July 19, 2001                             BSD