Estou movendo um diretório para outro usando o comando mv.
No entanto, fui forçado a desligar o computador, o que significa perder a conexão com o servidor.
O que acontece com o comando mv?
Nota: Após o logon, vi que todos os arquivos foram movidos corretamente, mesmo tendo certeza de que não foram movidos quando fechei a conexão. Parece que o mv continuou funcionando.
Este sou eu ssh para centosh machine no servidor de nuvem steadfast.net.
screen
ou faça otmux
login para iniciar um terminal virtual que continuará operando quando você desconectar [ou seja, você poderá reconectá-lo posteriormente e ver o terminal no mesmo estado em que o deixou, além de atualizações em entre]Respostas:
Se
mv
foi iniciado como:Em seguida
mv
, receberá um SIGPIPE (e morrer) se tentar gravar algo em stdout ou stderr (como uma mensagem de erro).Se você iniciou uma sessão interativa como:
E iniciado a
mv
partir do shell interativo, quando o lado mestre do pseudo-terminal iniciadosshd
será fechado (aossh
fechar a conexão TCP na saída), o líder da sessão associado ao lado escravo do pseudo-terminal, que é o shell interativo remoto, receberá um sinal SIGHUP (desligue).Ao receber esse sinal, os shells (a menos que você tenha emitido a
trap '' HUP
) normalmente encaminham esse sinal para todos os processos nos trabalhos que eles iniciaram, a menos que você tenha dito explicitamente para não fazer isso (como comdisown
ou com&|
alguns shells).Outros processos (como
mv
) geralmente morrem ao receber esse sinal, a menos que tenham sido instruídos a ignorá-lo (usandonohup
ou se seus pais o ignoraram).Se você emitiu um:
Todos os trabalhos iniciados depois dele o herdarão e ignorarão o SIGHUP.
O shell não morre do sinal SIGHUP enviado após a desconexão, mas sai no próximo prompt, pois seu stdin se foi. Na saída, algumas conchas enviam SIGHUP para seus trabalhos (não renegados). Aqueles que começaram depois que o
trap '' HUP
ignoram, os outros vão morrer.Em resumo, nesse caso, a menos que você tenha tomado precauções prévias para que isso não aconteça, você
mv
morrerá.Para evitá-lo da próxima vez, se estiver usando
tcsh
,zsh
oubash
, antes de desligar a máquina, pressione Ctrl-Zpara suspendermv
, entrarbg
para retomá-lo no fundo, edisown
para deserdá -lo.Ou você pode usar
screen
outmux
. Em um SIGHUP, esses itens serão desconectados do terminal host agora desativado, mas os aplicativos executados no terminal que ele emula continuarão funcionando sem cabeça e você poderá reconectar a sessão a outro terminal posteriormente para ver comomv
foi.Ou use-o
nohup mv
para tornar-semv
imune ao SIGHUP e ter sua saída e erros em umnohup.out
arquivo que você pode verificar mais tarde.Agora, eu não sei sobre o seu provedor de hospedagem específico, mas com alguns, quando você
ssh
entra na instância, não está iniciando sessões de shell por lá, mas sim anexado ao console, ou seja, a uma sessão que já foi iniciada e, quando você sai, não encerra a sessão, apenas desanexa-a. Portanto, o shell não mata, nem o matamv
. Se for esse o caso, você notará que aps
execução a partir daí daria o mesmopid
para o seu shell em duasssh
sessões separadas .fonte