Si salgo de Terminal.app, ¿los procesos que inició se cerraron con él?

6

Si uso Terminal para iniciar un proceso que consume mucho tiempo (en este caso, eliminar un archivo grande .sparsebundle en mi Time Capsule, que podría llevar horas) y si luego salgo de la aplicación Terminal antes de que el proceso haya finalizado, ¿Ese proceso en curso (la eliminación) también se cierra? ¿O es que Terminal solo actúa como el 'disparador' y el proceso se ejecuta de forma autónoma, independientemente de si Terminal.app está activo o no?

    
pregunta Rick Lecoat 04.01.2018 - 08:21

1 respuesta

6

Para que el comando continúe después de cerrar la ventana de la aplicación de Terminal, debe hacer lo siguiente.

  1. Precede el comando con nohup . Esto permitirá que el comando continúe después de que se cierre la ventana de la aplicación Terminal. Esto también permite que el comando continúe después de salir de la aplicación de Terminal.
  2. Redirigir la salida estándar y el error estándar a los mismos archivos o diferentes. Esto le da a la salida un lugar para ir, de lo contrario se usará el valor predeterminado. (Vea la página de manual a continuación).
  3. Agregue un & al final de la línea de comando. Esto ejecuta el comando en segundo plano, de lo contrario no obtendrá un indicador de comandos hasta que el comando finalice.

Por ejemplo, si quisiera usar el comando find para buscar el archivo readgpt e imprimir los resultados en una ventana de aplicación de Terminal, ejecutaría el comando que se indica a continuación. Nota: aquí, no me importan los mensajes de error, así que redirigí el error estándar a /dev/null .

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

Ahora, si quisiera cerrar la ventana de la aplicación Terminal y ver los resultados más adelante, ejecutaría el siguiente comando.

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

Después de ingresar lo anterior, obtendrá un número de trabajo entre paréntesis seguido de un número de proceso. A continuación se muestra un ejemplo.

[1] 1456

Puede obtener el estado de este proceso ingresando el comando ps , como se muestra a continuación.

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

Puede finalizar este proceso ingresando el comando kill , como se muestra a continuación.

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

Nota: si ingresa el comando kill en una ventana que difiere de la que se usó para crear el proceso, probablemente no habrá salida.

La página del manual para el comando nohup se muestra a continuación.

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
    
respondido por el David Anderson 04.01.2018 - 10:59

Lea otras preguntas en las etiquetas