Considere la siguiente nohup
ejecución:
nohup script.sh > script.out &
¿Hay alguna forma de cerrar sesión en el terminal, volver a conectar, volver a poner el proceso en primer plano e interactuar con él usando el teclado?
command-line
process
background
nohup
Adam Matan
fuente
fuente
nohup no desconecta un comando del terminal, hace que su secuencia de comandos ignore
SIGHUP
y redirigestdout/stderr
a un archivonohup.out
, para que el comando pueda continuar ejecutándose en segundo plano después de cerrar sesión.nohup
no pone automáticamente el comando que ejecuta en segundo plano. Uno debe hacer eso explícitamente, terminando la línea de comando con un&
.jobs
puede imprimir trabajos actualmente en ejecución y su estado. Si el comandojobs
no puede encontrarlo, ya no es un proceso secundario de ese shell.Se puede recuperar un trabajo en segundo plano en primer plano en bash,
fg
incluso si se ejecuta connohup
. Pero eso no cambiará la redirección de salida, que seguirá yendo al archivonohup.out
.Si cierra el shell / terminal o cierra sesión, su comando ya no es un hijo de ese shell. Pertenece al
init
proceso. Si buscapstree
, verá que ahora es propiedad del proceso 1 (init
). Eso no se puede volver a poner en primer plano porque el primer plano ya no existe.fuente
If the command jobs cannot find it, then it is no longer a child process of that shell.
Este es un error: tratar esta secuencia para ver cómo:sleep 100 & disown ; echo Jobs:; jobs; echo Tree:; pstree -ap $$
. Después de este comando, todavía verá elsleep
trabajo con el mismo PID impreso cuando lo generó, mientrasjobs
que no imprimirá nada. La única forma en que un proceso hijo puede dejar de ser hijo es perdiendo a su padre (entonces el huérfano se convierte en hijo deinit
) o bifurcando + saliendo (pero luego el PID cambia, por lo que no es el hijo original).Secundaré el uso de un multiplexor de terminal, pero tmux , no pantalla. La pantalla es, para todos los efectos, sin mantenimiento. Su configuración es un arte oscuro, probablemente registrado por primera vez en un apéndice del Necronomicon. Intentar escribir su propia configuración es como un vistazo a Cthulu. Seriamente. Mire a su alrededor los archivos .screenrc de las personas . Para estar seguros, hay formas de mediar la abominación de un archivo de configuración por parte de la pantalla. Byobu hace un trabajo admirable como el velo entre los usuarios mortales y el código impío. Viene con colores sensibles, una interfaz de menú y quizás lo más importante, una barra de estado.
Pero como dije, recomiendo tmux en su lugar. Todavía requiere una configuración menor, pero está bien documentado y su archivo de configuración no se verá como un galimatías. Además, comienzas con colores y una barra de estado. Compare mis archivos screenrc y tmux.conf:
fuente
Si solo está interesado en mirar en vivo la salida, esto podría ser adecuado para usted:
fuente
Cualquier comando de Linux se puede enviar en segundo plano con '
&
' agregado al final.Para ver todos los trabajos en segundo plano, puede emitir
jobs
Aquí estoy ejecutando 3 trabajos en segundo plano: zookeeper, kafka y mongo daemon. [1], [2] y [3] son números de trabajo respectivos para estas tareas.
Puede llevar esa tarea a primer plano usando
fg %$taskNumber.
fuente