Estoy moviendo un directorio a otro usando el comando mv.
Sin embargo, me vi obligado a apagar mi computadora, lo que significa perder la conexión con el servidor.
¿Qué pasa con el comando mv?
Nota: Después de volver a iniciar sesión, vi que todos los archivos se han movido correctamente aunque estaba seguro de que no se movieron cuando cerré la conexión. Parece que mv continuó corriendo.
Esta es mi máquina ssh a centosh en el servidor de la nube steadfast.net.
screen
otmux
una vez que haya iniciado sesión para iniciar un terminal virtual que continuará funcionando cuando se desconecte [es decir, puede volver a conectarlo y ver el terminal en el mismo estado en que lo dejó, más cualquier actualización en entre]Respuestas:
Si
mv
se inició como:Luego
mv
recibirá un SIGPIPE (y morir) si intenta escribir algo en stdout o stderr (como un mensaje de error).Si comenzó una sesión interactiva como:
Y comenzó
mv
desde el shell interactivo allí, cuando el lado maestro del pseudo-terminal iniciadosshd
se cerrará (alssh
cerrar la conexión TCP al salir), el líder de la sesión asociada con el lado esclavo del pseudo-terminal, que es el shell interactivo remoto, recibirá una señal SIGHUP (cuelgue).Al recibir esa señal, los shells (a menos que haya emitido un
trap '' HUP
) generalmente envían esa señal a todos los procesos en los trabajos que han comenzado, a menos que le haya dicho explícitamente que no lo haga (como condisown
o con&|
algunos shells).Otros procesos (como
mv
) generalmente morirán al recibir esa señal a menos que se les haya dicho que la ignoren (al usarlanohup
o si su padre la ignoró).Si ha emitido un:
Luego, todos los trabajos iniciados después de que lo hereden e ignorarán SIGHUP.
El shell no morirá por la señal SIGHUP enviada después de la desconexión, sino que saldrá en el siguiente mensaje, ya que su stdin se ha ido. Al salir, algunos proyectiles envían SIGHUP a sus trabajos (no rechazados). Los que comiencen después
trap '' HUP
lo ignorarán, los otros morirán.En resumen, en ese caso, a menos que haya tomado precauciones previas para que no suceda,
mv
morirá.Para evitarlo la próxima vez, si usa
tcsh
,zsh
obash
, antes de apagar la máquina, presione Ctrl-Zpara suspendermv
, ingresebg
para reanudarla en segundo plano ydisown
para rechazarla .O podrías usar
screen
otmux
. Tras un SIGHUP, esos se desconectarán de su terminal host ahora desaparecida, pero las aplicaciones que se ejecutan en el terminal que emula continuarán ejecutándose sin cabeza y puede volver a conectar la sesión a otro terminal más tarde para ver cómomv
fue.O use
nohup mv
para hacersemv
inmune a SIGHUP y hacer que su salida y errores vayan a unnohup.out
archivo que puede verificar más adelante.Ahora, no sé acerca de su proveedor de alojamiento específico, pero con algunos, cuando ingresa
ssh
a la instancia, no está iniciando una sesión de shell allí, sino que se conecta a la consola, es decir, a una sesión que ya se inició. , y cuando sale, no termina esa sesión, solo se desconecta de ella. Entonces, el caparazón no mata, ni tampocomv
. Si ese es el caso, notará queps
ejecutar desde allí le daría lo mismopid
para su shell en dosssh
sesiones separadas .fuente